1 /* 2 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 3 * Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved. 4 * 5 * This copyrighted material is made available to anyone wishing to use, 6 * modify, copy, or redistribute it subject to the terms and conditions 7 * of the GNU General Public License version 2. 8 */ 9 10 #include <linux/sched.h> 11 #include <linux/slab.h> 12 #include <linux/spinlock.h> 13 #include <linux/buffer_head.h> 14 #include <linux/delay.h> 15 #include <linux/sort.h> 16 #include <linux/jhash.h> 17 #include <linux/kallsyms.h> 18 #include <linux/gfs2_ondisk.h> 19 #include <linux/list.h> 20 #include <linux/wait.h> 21 #include <linux/module.h> 22 #include <linux/rwsem.h> 23 #include <asm/uaccess.h> 24 #include <linux/seq_file.h> 25 #include <linux/debugfs.h> 26 #include <linux/kthread.h> 27 #include <linux/freezer.h> 28 #include <linux/workqueue.h> 29 #include <linux/jiffies.h> 30 31 #include "gfs2.h" 32 #include "incore.h" 33 #include "glock.h" 34 #include "glops.h" 35 #include "inode.h" 36 #include "lops.h" 37 #include "meta_io.h" 38 #include "quota.h" 39 #include "super.h" 40 #include "util.h" 41 #include "bmap.h" 42 #define CREATE_TRACE_POINTS 43 #include "trace_gfs2.h" 44 45 struct gfs2_gl_hash_bucket { 46 struct hlist_head hb_list; 47 }; 48 49 struct gfs2_glock_iter { 50 int hash; /* hash bucket index */ 51 struct gfs2_sbd *sdp; /* incore superblock */ 52 struct gfs2_glock *gl; /* current glock struct */ 53 char string[512]; /* scratch space */ 54 }; 55 56 typedef void (*glock_examiner) (struct gfs2_glock * gl); 57 58 static int gfs2_dump_lockstate(struct gfs2_sbd *sdp); 59 static int __dump_glock(struct seq_file *seq, const struct gfs2_glock *gl); 60 #define GLOCK_BUG_ON(gl,x) do { if (unlikely(x)) { __dump_glock(NULL, gl); BUG(); } } while(0) 61 static void do_xmote(struct gfs2_glock *gl, struct gfs2_holder *gh, unsigned int target); 62 63 static DECLARE_RWSEM(gfs2_umount_flush_sem); 64 static struct dentry *gfs2_root; 65 static struct workqueue_struct *glock_workqueue; 66 static LIST_HEAD(lru_list); 67 static atomic_t lru_count = ATOMIC_INIT(0); 68 static DEFINE_SPINLOCK(lru_lock); 69 70 #define GFS2_GL_HASH_SHIFT 15 71 #define GFS2_GL_HASH_SIZE (1 << GFS2_GL_HASH_SHIFT) 72 #define GFS2_GL_HASH_MASK (GFS2_GL_HASH_SIZE - 1) 73 74 static struct gfs2_gl_hash_bucket gl_hash_table[GFS2_GL_HASH_SIZE]; 75 static struct dentry *gfs2_root; 76 77 /* 78 * Despite what you might think, the numbers below are not arbitrary :-) 79 * They are taken from the ipv4 routing hash code, which is well tested 80 * and thus should be nearly optimal. Later on we might tweek the numbers 81 * but for now this should be fine. 82 * 83 * The reason for putting the locks in a separate array from the list heads 84 * is that we can have fewer locks than list heads and save memory. We use 85 * the same hash function for both, but with a different hash mask. 86 */ 87 #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || \ 88 defined(CONFIG_PROVE_LOCKING) 89 90 #ifdef CONFIG_LOCKDEP 91 # define GL_HASH_LOCK_SZ 256 92 #else 93 # if NR_CPUS >= 32 94 # define GL_HASH_LOCK_SZ 4096 95 # elif NR_CPUS >= 16 96 # define GL_HASH_LOCK_SZ 2048 97 # elif NR_CPUS >= 8 98 # define GL_HASH_LOCK_SZ 1024 99 # elif NR_CPUS >= 4 100 # define GL_HASH_LOCK_SZ 512 101 # else 102 # define GL_HASH_LOCK_SZ 256 103 # endif 104 #endif 105 106 /* We never want more locks than chains */ 107 #if GFS2_GL_HASH_SIZE < GL_HASH_LOCK_SZ 108 # undef GL_HASH_LOCK_SZ 109 # define GL_HASH_LOCK_SZ GFS2_GL_HASH_SIZE 110 #endif 111 112 static rwlock_t gl_hash_locks[GL_HASH_LOCK_SZ]; 113 114 static inline rwlock_t *gl_lock_addr(unsigned int x) 115 { 116 return &gl_hash_locks[x & (GL_HASH_LOCK_SZ-1)]; 117 } 118 #else /* not SMP, so no spinlocks required */ 119 static inline rwlock_t *gl_lock_addr(unsigned int x) 120 { 121 return NULL; 122 } 123 #endif 124 125 /** 126 * gl_hash() - Turn glock number into hash bucket number 127 * @lock: The glock number 128 * 129 * Returns: The number of the corresponding hash bucket 130 */ 131 132 static unsigned int gl_hash(const struct gfs2_sbd *sdp, 133 const struct lm_lockname *name) 134 { 135 unsigned int h; 136 137 h = jhash(&name->ln_number, sizeof(u64), 0); 138 h = jhash(&name->ln_type, sizeof(unsigned int), h); 139 h = jhash(&sdp, sizeof(struct gfs2_sbd *), h); 140 h &= GFS2_GL_HASH_MASK; 141 142 return h; 143 } 144 145 /** 146 * glock_free() - Perform a few checks and then release struct gfs2_glock 147 * @gl: The glock to release 148 * 149 * Also calls lock module to release its internal structure for this glock. 150 * 151 */ 152 153 static void glock_free(struct gfs2_glock *gl) 154 { 155 struct gfs2_sbd *sdp = gl->gl_sbd; 156 struct inode *aspace = gl->gl_aspace; 157 158 if (aspace) 159 gfs2_aspace_put(aspace); 160 trace_gfs2_glock_put(gl); 161 sdp->sd_lockstruct.ls_ops->lm_put_lock(gfs2_glock_cachep, gl); 162 } 163 164 /** 165 * gfs2_glock_hold() - increment reference count on glock 166 * @gl: The glock to hold 167 * 168 */ 169 170 static void gfs2_glock_hold(struct gfs2_glock *gl) 171 { 172 GLOCK_BUG_ON(gl, atomic_read(&gl->gl_ref) == 0); 173 atomic_inc(&gl->gl_ref); 174 } 175 176 /** 177 * gfs2_glock_schedule_for_reclaim - Add a glock to the reclaim list 178 * @gl: the glock 179 * 180 */ 181 182 static void gfs2_glock_schedule_for_reclaim(struct gfs2_glock *gl) 183 { 184 spin_lock(&lru_lock); 185 if (list_empty(&gl->gl_lru) && gl->gl_state != LM_ST_UNLOCKED) { 186 list_add_tail(&gl->gl_lru, &lru_list); 187 atomic_inc(&lru_count); 188 } 189 spin_unlock(&lru_lock); 190 } 191 192 /** 193 * gfs2_glock_put() - Decrement reference count on glock 194 * @gl: The glock to put 195 * 196 */ 197 198 int gfs2_glock_put(struct gfs2_glock *gl) 199 { 200 int rv = 0; 201 202 write_lock(gl_lock_addr(gl->gl_hash)); 203 if (atomic_dec_and_test(&gl->gl_ref)) { 204 hlist_del(&gl->gl_list); 205 write_unlock(gl_lock_addr(gl->gl_hash)); 206 spin_lock(&lru_lock); 207 if (!list_empty(&gl->gl_lru)) { 208 list_del_init(&gl->gl_lru); 209 atomic_dec(&lru_count); 210 } 211 spin_unlock(&lru_lock); 212 GLOCK_BUG_ON(gl, !list_empty(&gl->gl_holders)); 213 glock_free(gl); 214 rv = 1; 215 goto out; 216 } 217 /* 1 for being hashed, 1 for having state != LM_ST_UNLOCKED */ 218 if (atomic_read(&gl->gl_ref) == 2) 219 gfs2_glock_schedule_for_reclaim(gl); 220 write_unlock(gl_lock_addr(gl->gl_hash)); 221 out: 222 return rv; 223 } 224 225 /** 226 * search_bucket() - Find struct gfs2_glock by lock number 227 * @bucket: the bucket to search 228 * @name: The lock name 229 * 230 * Returns: NULL, or the struct gfs2_glock with the requested number 231 */ 232 233 static struct gfs2_glock *search_bucket(unsigned int hash, 234 const struct gfs2_sbd *sdp, 235 const struct lm_lockname *name) 236 { 237 struct gfs2_glock *gl; 238 struct hlist_node *h; 239 240 hlist_for_each_entry(gl, h, &gl_hash_table[hash].hb_list, gl_list) { 241 if (!lm_name_equal(&gl->gl_name, name)) 242 continue; 243 if (gl->gl_sbd != sdp) 244 continue; 245 246 atomic_inc(&gl->gl_ref); 247 248 return gl; 249 } 250 251 return NULL; 252 } 253 254 /** 255 * may_grant - check if its ok to grant a new lock 256 * @gl: The glock 257 * @gh: The lock request which we wish to grant 258 * 259 * Returns: true if its ok to grant the lock 260 */ 261 262 static inline int may_grant(const struct gfs2_glock *gl, const struct gfs2_holder *gh) 263 { 264 const struct gfs2_holder *gh_head = list_entry(gl->gl_holders.next, const struct gfs2_holder, gh_list); 265 if ((gh->gh_state == LM_ST_EXCLUSIVE || 266 gh_head->gh_state == LM_ST_EXCLUSIVE) && gh != gh_head) 267 return 0; 268 if (gl->gl_state == gh->gh_state) 269 return 1; 270 if (gh->gh_flags & GL_EXACT) 271 return 0; 272 if (gl->gl_state == LM_ST_EXCLUSIVE) { 273 if (gh->gh_state == LM_ST_SHARED && gh_head->gh_state == LM_ST_SHARED) 274 return 1; 275 if (gh->gh_state == LM_ST_DEFERRED && gh_head->gh_state == LM_ST_DEFERRED) 276 return 1; 277 } 278 if (gl->gl_state != LM_ST_UNLOCKED && (gh->gh_flags & LM_FLAG_ANY)) 279 return 1; 280 return 0; 281 } 282 283 static void gfs2_holder_wake(struct gfs2_holder *gh) 284 { 285 clear_bit(HIF_WAIT, &gh->gh_iflags); 286 smp_mb__after_clear_bit(); 287 wake_up_bit(&gh->gh_iflags, HIF_WAIT); 288 } 289 290 /** 291 * do_promote - promote as many requests as possible on the current queue 292 * @gl: The glock 293 * 294 * Returns: 1 if there is a blocked holder at the head of the list, or 2 295 * if a type specific operation is underway. 296 */ 297 298 static int do_promote(struct gfs2_glock *gl) 299 __releases(&gl->gl_spin) 300 __acquires(&gl->gl_spin) 301 { 302 const struct gfs2_glock_operations *glops = gl->gl_ops; 303 struct gfs2_holder *gh, *tmp; 304 int ret; 305 306 restart: 307 list_for_each_entry_safe(gh, tmp, &gl->gl_holders, gh_list) { 308 if (test_bit(HIF_HOLDER, &gh->gh_iflags)) 309 continue; 310 if (may_grant(gl, gh)) { 311 if (gh->gh_list.prev == &gl->gl_holders && 312 glops->go_lock) { 313 spin_unlock(&gl->gl_spin); 314 /* FIXME: eliminate this eventually */ 315 ret = glops->go_lock(gh); 316 spin_lock(&gl->gl_spin); 317 if (ret) { 318 if (ret == 1) 319 return 2; 320 gh->gh_error = ret; 321 list_del_init(&gh->gh_list); 322 trace_gfs2_glock_queue(gh, 0); 323 gfs2_holder_wake(gh); 324 goto restart; 325 } 326 set_bit(HIF_HOLDER, &gh->gh_iflags); 327 trace_gfs2_promote(gh, 1); 328 gfs2_holder_wake(gh); 329 goto restart; 330 } 331 set_bit(HIF_HOLDER, &gh->gh_iflags); 332 trace_gfs2_promote(gh, 0); 333 gfs2_holder_wake(gh); 334 continue; 335 } 336 if (gh->gh_list.prev == &gl->gl_holders) 337 return 1; 338 break; 339 } 340 return 0; 341 } 342 343 /** 344 * do_error - Something unexpected has happened during a lock request 345 * 346 */ 347 348 static inline void do_error(struct gfs2_glock *gl, const int ret) 349 { 350 struct gfs2_holder *gh, *tmp; 351 352 list_for_each_entry_safe(gh, tmp, &gl->gl_holders, gh_list) { 353 if (test_bit(HIF_HOLDER, &gh->gh_iflags)) 354 continue; 355 if (ret & LM_OUT_ERROR) 356 gh->gh_error = -EIO; 357 else if (gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB)) 358 gh->gh_error = GLR_TRYFAILED; 359 else 360 continue; 361 list_del_init(&gh->gh_list); 362 trace_gfs2_glock_queue(gh, 0); 363 gfs2_holder_wake(gh); 364 } 365 } 366 367 /** 368 * find_first_waiter - find the first gh that's waiting for the glock 369 * @gl: the glock 370 */ 371 372 static inline struct gfs2_holder *find_first_waiter(const struct gfs2_glock *gl) 373 { 374 struct gfs2_holder *gh; 375 376 list_for_each_entry(gh, &gl->gl_holders, gh_list) { 377 if (!test_bit(HIF_HOLDER, &gh->gh_iflags)) 378 return gh; 379 } 380 return NULL; 381 } 382 383 /** 384 * state_change - record that the glock is now in a different state 385 * @gl: the glock 386 * @new_state the new state 387 * 388 */ 389 390 static void state_change(struct gfs2_glock *gl, unsigned int new_state) 391 { 392 int held1, held2; 393 394 held1 = (gl->gl_state != LM_ST_UNLOCKED); 395 held2 = (new_state != LM_ST_UNLOCKED); 396 397 if (held1 != held2) { 398 if (held2) 399 gfs2_glock_hold(gl); 400 else 401 gfs2_glock_put(gl); 402 } 403 404 gl->gl_state = new_state; 405 gl->gl_tchange = jiffies; 406 } 407 408 static void gfs2_demote_wake(struct gfs2_glock *gl) 409 { 410 gl->gl_demote_state = LM_ST_EXCLUSIVE; 411 clear_bit(GLF_DEMOTE, &gl->gl_flags); 412 smp_mb__after_clear_bit(); 413 wake_up_bit(&gl->gl_flags, GLF_DEMOTE); 414 } 415 416 /** 417 * finish_xmote - The DLM has replied to one of our lock requests 418 * @gl: The glock 419 * @ret: The status from the DLM 420 * 421 */ 422 423 static void finish_xmote(struct gfs2_glock *gl, unsigned int ret) 424 { 425 const struct gfs2_glock_operations *glops = gl->gl_ops; 426 struct gfs2_holder *gh; 427 unsigned state = ret & LM_OUT_ST_MASK; 428 int rv; 429 430 spin_lock(&gl->gl_spin); 431 trace_gfs2_glock_state_change(gl, state); 432 state_change(gl, state); 433 gh = find_first_waiter(gl); 434 435 /* Demote to UN request arrived during demote to SH or DF */ 436 if (test_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags) && 437 state != LM_ST_UNLOCKED && gl->gl_demote_state == LM_ST_UNLOCKED) 438 gl->gl_target = LM_ST_UNLOCKED; 439 440 /* Check for state != intended state */ 441 if (unlikely(state != gl->gl_target)) { 442 if (gh && !test_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags)) { 443 /* move to back of queue and try next entry */ 444 if (ret & LM_OUT_CANCELED) { 445 if ((gh->gh_flags & LM_FLAG_PRIORITY) == 0) 446 list_move_tail(&gh->gh_list, &gl->gl_holders); 447 gh = find_first_waiter(gl); 448 gl->gl_target = gh->gh_state; 449 goto retry; 450 } 451 /* Some error or failed "try lock" - report it */ 452 if ((ret & LM_OUT_ERROR) || 453 (gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB))) { 454 gl->gl_target = gl->gl_state; 455 do_error(gl, ret); 456 goto out; 457 } 458 } 459 switch(state) { 460 /* Unlocked due to conversion deadlock, try again */ 461 case LM_ST_UNLOCKED: 462 retry: 463 do_xmote(gl, gh, gl->gl_target); 464 break; 465 /* Conversion fails, unlock and try again */ 466 case LM_ST_SHARED: 467 case LM_ST_DEFERRED: 468 do_xmote(gl, gh, LM_ST_UNLOCKED); 469 break; 470 default: /* Everything else */ 471 printk(KERN_ERR "GFS2: wanted %u got %u\n", gl->gl_target, state); 472 GLOCK_BUG_ON(gl, 1); 473 } 474 spin_unlock(&gl->gl_spin); 475 gfs2_glock_put(gl); 476 return; 477 } 478 479 /* Fast path - we got what we asked for */ 480 if (test_and_clear_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags)) 481 gfs2_demote_wake(gl); 482 if (state != LM_ST_UNLOCKED) { 483 if (glops->go_xmote_bh) { 484 spin_unlock(&gl->gl_spin); 485 rv = glops->go_xmote_bh(gl, gh); 486 if (rv == -EAGAIN) 487 return; 488 spin_lock(&gl->gl_spin); 489 if (rv) { 490 do_error(gl, rv); 491 goto out; 492 } 493 } 494 rv = do_promote(gl); 495 if (rv == 2) 496 goto out_locked; 497 } 498 out: 499 clear_bit(GLF_LOCK, &gl->gl_flags); 500 out_locked: 501 spin_unlock(&gl->gl_spin); 502 gfs2_glock_put(gl); 503 } 504 505 static unsigned int gfs2_lm_lock(struct gfs2_sbd *sdp, void *lock, 506 unsigned int req_state, 507 unsigned int flags) 508 { 509 int ret = LM_OUT_ERROR; 510 511 if (!sdp->sd_lockstruct.ls_ops->lm_lock) 512 return req_state == LM_ST_UNLOCKED ? 0 : req_state; 513 514 if (likely(!test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) 515 ret = sdp->sd_lockstruct.ls_ops->lm_lock(lock, 516 req_state, flags); 517 return ret; 518 } 519 520 /** 521 * do_xmote - Calls the DLM to change the state of a lock 522 * @gl: The lock state 523 * @gh: The holder (only for promotes) 524 * @target: The target lock state 525 * 526 */ 527 528 static void do_xmote(struct gfs2_glock *gl, struct gfs2_holder *gh, unsigned int target) 529 __releases(&gl->gl_spin) 530 __acquires(&gl->gl_spin) 531 { 532 const struct gfs2_glock_operations *glops = gl->gl_ops; 533 struct gfs2_sbd *sdp = gl->gl_sbd; 534 unsigned int lck_flags = gh ? gh->gh_flags : 0; 535 int ret; 536 537 lck_flags &= (LM_FLAG_TRY | LM_FLAG_TRY_1CB | LM_FLAG_NOEXP | 538 LM_FLAG_PRIORITY); 539 BUG_ON(gl->gl_state == target); 540 BUG_ON(gl->gl_state == gl->gl_target); 541 if ((target == LM_ST_UNLOCKED || target == LM_ST_DEFERRED) && 542 glops->go_inval) { 543 set_bit(GLF_INVALIDATE_IN_PROGRESS, &gl->gl_flags); 544 do_error(gl, 0); /* Fail queued try locks */ 545 } 546 spin_unlock(&gl->gl_spin); 547 if (glops->go_xmote_th) 548 glops->go_xmote_th(gl); 549 if (test_bit(GLF_INVALIDATE_IN_PROGRESS, &gl->gl_flags)) 550 glops->go_inval(gl, target == LM_ST_DEFERRED ? 0 : DIO_METADATA); 551 clear_bit(GLF_INVALIDATE_IN_PROGRESS, &gl->gl_flags); 552 553 gfs2_glock_hold(gl); 554 if (target != LM_ST_UNLOCKED && (gl->gl_state == LM_ST_SHARED || 555 gl->gl_state == LM_ST_DEFERRED) && 556 !(lck_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB))) 557 lck_flags |= LM_FLAG_TRY_1CB; 558 ret = gfs2_lm_lock(sdp, gl, target, lck_flags); 559 560 if (!(ret & LM_OUT_ASYNC)) { 561 finish_xmote(gl, ret); 562 gfs2_glock_hold(gl); 563 if (queue_delayed_work(glock_workqueue, &gl->gl_work, 0) == 0) 564 gfs2_glock_put(gl); 565 } else { 566 GLOCK_BUG_ON(gl, ret != LM_OUT_ASYNC); 567 } 568 spin_lock(&gl->gl_spin); 569 } 570 571 /** 572 * find_first_holder - find the first "holder" gh 573 * @gl: the glock 574 */ 575 576 static inline struct gfs2_holder *find_first_holder(const struct gfs2_glock *gl) 577 { 578 struct gfs2_holder *gh; 579 580 if (!list_empty(&gl->gl_holders)) { 581 gh = list_entry(gl->gl_holders.next, struct gfs2_holder, gh_list); 582 if (test_bit(HIF_HOLDER, &gh->gh_iflags)) 583 return gh; 584 } 585 return NULL; 586 } 587 588 /** 589 * run_queue - do all outstanding tasks related to a glock 590 * @gl: The glock in question 591 * @nonblock: True if we must not block in run_queue 592 * 593 */ 594 595 static void run_queue(struct gfs2_glock *gl, const int nonblock) 596 __releases(&gl->gl_spin) 597 __acquires(&gl->gl_spin) 598 { 599 struct gfs2_holder *gh = NULL; 600 int ret; 601 602 if (test_and_set_bit(GLF_LOCK, &gl->gl_flags)) 603 return; 604 605 GLOCK_BUG_ON(gl, test_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags)); 606 607 if (test_bit(GLF_DEMOTE, &gl->gl_flags) && 608 gl->gl_demote_state != gl->gl_state) { 609 if (find_first_holder(gl)) 610 goto out_unlock; 611 if (nonblock) 612 goto out_sched; 613 set_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags); 614 GLOCK_BUG_ON(gl, gl->gl_demote_state == LM_ST_EXCLUSIVE); 615 gl->gl_target = gl->gl_demote_state; 616 } else { 617 if (test_bit(GLF_DEMOTE, &gl->gl_flags)) 618 gfs2_demote_wake(gl); 619 ret = do_promote(gl); 620 if (ret == 0) 621 goto out_unlock; 622 if (ret == 2) 623 goto out; 624 gh = find_first_waiter(gl); 625 gl->gl_target = gh->gh_state; 626 if (!(gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB))) 627 do_error(gl, 0); /* Fail queued try locks */ 628 } 629 do_xmote(gl, gh, gl->gl_target); 630 out: 631 return; 632 633 out_sched: 634 gfs2_glock_hold(gl); 635 if (queue_delayed_work(glock_workqueue, &gl->gl_work, 0) == 0) 636 gfs2_glock_put(gl); 637 out_unlock: 638 clear_bit(GLF_LOCK, &gl->gl_flags); 639 goto out; 640 } 641 642 static void glock_work_func(struct work_struct *work) 643 { 644 unsigned long delay = 0; 645 struct gfs2_glock *gl = container_of(work, struct gfs2_glock, gl_work.work); 646 647 if (test_and_clear_bit(GLF_REPLY_PENDING, &gl->gl_flags)) 648 finish_xmote(gl, gl->gl_reply); 649 down_read(&gfs2_umount_flush_sem); 650 spin_lock(&gl->gl_spin); 651 if (test_and_clear_bit(GLF_PENDING_DEMOTE, &gl->gl_flags) && 652 gl->gl_state != LM_ST_UNLOCKED && 653 gl->gl_demote_state != LM_ST_EXCLUSIVE) { 654 unsigned long holdtime, now = jiffies; 655 holdtime = gl->gl_tchange + gl->gl_ops->go_min_hold_time; 656 if (time_before(now, holdtime)) 657 delay = holdtime - now; 658 set_bit(delay ? GLF_PENDING_DEMOTE : GLF_DEMOTE, &gl->gl_flags); 659 } 660 run_queue(gl, 0); 661 spin_unlock(&gl->gl_spin); 662 up_read(&gfs2_umount_flush_sem); 663 if (!delay || 664 queue_delayed_work(glock_workqueue, &gl->gl_work, delay) == 0) 665 gfs2_glock_put(gl); 666 } 667 668 /** 669 * gfs2_glock_get() - Get a glock, or create one if one doesn't exist 670 * @sdp: The GFS2 superblock 671 * @number: the lock number 672 * @glops: The glock_operations to use 673 * @create: If 0, don't create the glock if it doesn't exist 674 * @glp: the glock is returned here 675 * 676 * This does not lock a glock, just finds/creates structures for one. 677 * 678 * Returns: errno 679 */ 680 681 int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number, 682 const struct gfs2_glock_operations *glops, int create, 683 struct gfs2_glock **glp) 684 { 685 struct lm_lockname name = { .ln_number = number, .ln_type = glops->go_type }; 686 struct gfs2_glock *gl, *tmp; 687 unsigned int hash = gl_hash(sdp, &name); 688 int error; 689 690 read_lock(gl_lock_addr(hash)); 691 gl = search_bucket(hash, sdp, &name); 692 read_unlock(gl_lock_addr(hash)); 693 694 *glp = gl; 695 if (gl) 696 return 0; 697 if (!create) 698 return -ENOENT; 699 700 gl = kmem_cache_alloc(gfs2_glock_cachep, GFP_KERNEL); 701 if (!gl) 702 return -ENOMEM; 703 704 gl->gl_flags = 0; 705 gl->gl_name = name; 706 atomic_set(&gl->gl_ref, 1); 707 gl->gl_state = LM_ST_UNLOCKED; 708 gl->gl_target = LM_ST_UNLOCKED; 709 gl->gl_demote_state = LM_ST_EXCLUSIVE; 710 gl->gl_hash = hash; 711 gl->gl_ops = glops; 712 snprintf(gl->gl_strname, GDLM_STRNAME_BYTES, "%8x%16llx", name.ln_type, (unsigned long long)number); 713 memset(&gl->gl_lksb, 0, sizeof(struct dlm_lksb)); 714 gl->gl_lksb.sb_lvbptr = gl->gl_lvb; 715 gl->gl_tchange = jiffies; 716 gl->gl_object = NULL; 717 gl->gl_sbd = sdp; 718 gl->gl_aspace = NULL; 719 INIT_DELAYED_WORK(&gl->gl_work, glock_work_func); 720 721 /* If this glock protects actual on-disk data or metadata blocks, 722 create a VFS inode to manage the pages/buffers holding them. */ 723 if (glops == &gfs2_inode_glops || glops == &gfs2_rgrp_glops) { 724 gl->gl_aspace = gfs2_aspace_get(sdp); 725 if (!gl->gl_aspace) { 726 error = -ENOMEM; 727 goto fail; 728 } 729 } 730 731 write_lock(gl_lock_addr(hash)); 732 tmp = search_bucket(hash, sdp, &name); 733 if (tmp) { 734 write_unlock(gl_lock_addr(hash)); 735 glock_free(gl); 736 gl = tmp; 737 } else { 738 hlist_add_head(&gl->gl_list, &gl_hash_table[hash].hb_list); 739 write_unlock(gl_lock_addr(hash)); 740 } 741 742 *glp = gl; 743 744 return 0; 745 746 fail: 747 kmem_cache_free(gfs2_glock_cachep, gl); 748 return error; 749 } 750 751 /** 752 * gfs2_holder_init - initialize a struct gfs2_holder in the default way 753 * @gl: the glock 754 * @state: the state we're requesting 755 * @flags: the modifier flags 756 * @gh: the holder structure 757 * 758 */ 759 760 void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, unsigned flags, 761 struct gfs2_holder *gh) 762 { 763 INIT_LIST_HEAD(&gh->gh_list); 764 gh->gh_gl = gl; 765 gh->gh_ip = (unsigned long)__builtin_return_address(0); 766 gh->gh_owner_pid = get_pid(task_pid(current)); 767 gh->gh_state = state; 768 gh->gh_flags = flags; 769 gh->gh_error = 0; 770 gh->gh_iflags = 0; 771 gfs2_glock_hold(gl); 772 } 773 774 /** 775 * gfs2_holder_reinit - reinitialize a struct gfs2_holder so we can requeue it 776 * @state: the state we're requesting 777 * @flags: the modifier flags 778 * @gh: the holder structure 779 * 780 * Don't mess with the glock. 781 * 782 */ 783 784 void gfs2_holder_reinit(unsigned int state, unsigned flags, struct gfs2_holder *gh) 785 { 786 gh->gh_state = state; 787 gh->gh_flags = flags; 788 gh->gh_iflags = 0; 789 gh->gh_ip = (unsigned long)__builtin_return_address(0); 790 } 791 792 /** 793 * gfs2_holder_uninit - uninitialize a holder structure (drop glock reference) 794 * @gh: the holder structure 795 * 796 */ 797 798 void gfs2_holder_uninit(struct gfs2_holder *gh) 799 { 800 put_pid(gh->gh_owner_pid); 801 gfs2_glock_put(gh->gh_gl); 802 gh->gh_gl = NULL; 803 gh->gh_ip = 0; 804 } 805 806 /** 807 * gfs2_glock_holder_wait 808 * @word: unused 809 * 810 * This function and gfs2_glock_demote_wait both show up in the WCHAN 811 * field. Thus I've separated these otherwise identical functions in 812 * order to be more informative to the user. 813 */ 814 815 static int gfs2_glock_holder_wait(void *word) 816 { 817 schedule(); 818 return 0; 819 } 820 821 static int gfs2_glock_demote_wait(void *word) 822 { 823 schedule(); 824 return 0; 825 } 826 827 static void wait_on_holder(struct gfs2_holder *gh) 828 { 829 might_sleep(); 830 wait_on_bit(&gh->gh_iflags, HIF_WAIT, gfs2_glock_holder_wait, TASK_UNINTERRUPTIBLE); 831 } 832 833 static void wait_on_demote(struct gfs2_glock *gl) 834 { 835 might_sleep(); 836 wait_on_bit(&gl->gl_flags, GLF_DEMOTE, gfs2_glock_demote_wait, TASK_UNINTERRUPTIBLE); 837 } 838 839 /** 840 * handle_callback - process a demote request 841 * @gl: the glock 842 * @state: the state the caller wants us to change to 843 * 844 * There are only two requests that we are going to see in actual 845 * practise: LM_ST_SHARED and LM_ST_UNLOCKED 846 */ 847 848 static void handle_callback(struct gfs2_glock *gl, unsigned int state, 849 unsigned long delay) 850 { 851 int bit = delay ? GLF_PENDING_DEMOTE : GLF_DEMOTE; 852 853 set_bit(bit, &gl->gl_flags); 854 if (gl->gl_demote_state == LM_ST_EXCLUSIVE) { 855 gl->gl_demote_state = state; 856 gl->gl_demote_time = jiffies; 857 } else if (gl->gl_demote_state != LM_ST_UNLOCKED && 858 gl->gl_demote_state != state) { 859 gl->gl_demote_state = LM_ST_UNLOCKED; 860 } 861 trace_gfs2_demote_rq(gl); 862 } 863 864 /** 865 * gfs2_glock_wait - wait on a glock acquisition 866 * @gh: the glock holder 867 * 868 * Returns: 0 on success 869 */ 870 871 int gfs2_glock_wait(struct gfs2_holder *gh) 872 { 873 wait_on_holder(gh); 874 return gh->gh_error; 875 } 876 877 void gfs2_print_dbg(struct seq_file *seq, const char *fmt, ...) 878 { 879 va_list args; 880 881 va_start(args, fmt); 882 if (seq) { 883 struct gfs2_glock_iter *gi = seq->private; 884 vsprintf(gi->string, fmt, args); 885 seq_printf(seq, gi->string); 886 } else { 887 printk(KERN_ERR " "); 888 vprintk(fmt, args); 889 } 890 va_end(args); 891 } 892 893 /** 894 * add_to_queue - Add a holder to the wait queue (but look for recursion) 895 * @gh: the holder structure to add 896 * 897 * Eventually we should move the recursive locking trap to a 898 * debugging option or something like that. This is the fast 899 * path and needs to have the minimum number of distractions. 900 * 901 */ 902 903 static inline void add_to_queue(struct gfs2_holder *gh) 904 __releases(&gl->gl_spin) 905 __acquires(&gl->gl_spin) 906 { 907 struct gfs2_glock *gl = gh->gh_gl; 908 struct gfs2_sbd *sdp = gl->gl_sbd; 909 struct list_head *insert_pt = NULL; 910 struct gfs2_holder *gh2; 911 int try_lock = 0; 912 913 BUG_ON(gh->gh_owner_pid == NULL); 914 if (test_and_set_bit(HIF_WAIT, &gh->gh_iflags)) 915 BUG(); 916 917 if (gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB)) { 918 if (test_bit(GLF_LOCK, &gl->gl_flags)) 919 try_lock = 1; 920 if (test_bit(GLF_INVALIDATE_IN_PROGRESS, &gl->gl_flags)) 921 goto fail; 922 } 923 924 list_for_each_entry(gh2, &gl->gl_holders, gh_list) { 925 if (unlikely(gh2->gh_owner_pid == gh->gh_owner_pid && 926 (gh->gh_gl->gl_ops->go_type != LM_TYPE_FLOCK))) 927 goto trap_recursive; 928 if (try_lock && 929 !(gh2->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB)) && 930 !may_grant(gl, gh)) { 931 fail: 932 gh->gh_error = GLR_TRYFAILED; 933 gfs2_holder_wake(gh); 934 return; 935 } 936 if (test_bit(HIF_HOLDER, &gh2->gh_iflags)) 937 continue; 938 if (unlikely((gh->gh_flags & LM_FLAG_PRIORITY) && !insert_pt)) 939 insert_pt = &gh2->gh_list; 940 } 941 if (likely(insert_pt == NULL)) { 942 list_add_tail(&gh->gh_list, &gl->gl_holders); 943 if (unlikely(gh->gh_flags & LM_FLAG_PRIORITY)) 944 goto do_cancel; 945 return; 946 } 947 trace_gfs2_glock_queue(gh, 1); 948 list_add_tail(&gh->gh_list, insert_pt); 949 do_cancel: 950 gh = list_entry(gl->gl_holders.next, struct gfs2_holder, gh_list); 951 if (!(gh->gh_flags & LM_FLAG_PRIORITY)) { 952 spin_unlock(&gl->gl_spin); 953 if (sdp->sd_lockstruct.ls_ops->lm_cancel) 954 sdp->sd_lockstruct.ls_ops->lm_cancel(gl); 955 spin_lock(&gl->gl_spin); 956 } 957 return; 958 959 trap_recursive: 960 print_symbol(KERN_ERR "original: %s\n", gh2->gh_ip); 961 printk(KERN_ERR "pid: %d\n", pid_nr(gh2->gh_owner_pid)); 962 printk(KERN_ERR "lock type: %d req lock state : %d\n", 963 gh2->gh_gl->gl_name.ln_type, gh2->gh_state); 964 print_symbol(KERN_ERR "new: %s\n", gh->gh_ip); 965 printk(KERN_ERR "pid: %d\n", pid_nr(gh->gh_owner_pid)); 966 printk(KERN_ERR "lock type: %d req lock state : %d\n", 967 gh->gh_gl->gl_name.ln_type, gh->gh_state); 968 __dump_glock(NULL, gl); 969 BUG(); 970 } 971 972 /** 973 * gfs2_glock_nq - enqueue a struct gfs2_holder onto a glock (acquire a glock) 974 * @gh: the holder structure 975 * 976 * if (gh->gh_flags & GL_ASYNC), this never returns an error 977 * 978 * Returns: 0, GLR_TRYFAILED, or errno on failure 979 */ 980 981 int gfs2_glock_nq(struct gfs2_holder *gh) 982 { 983 struct gfs2_glock *gl = gh->gh_gl; 984 struct gfs2_sbd *sdp = gl->gl_sbd; 985 int error = 0; 986 987 if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) 988 return -EIO; 989 990 spin_lock(&gl->gl_spin); 991 add_to_queue(gh); 992 run_queue(gl, 1); 993 spin_unlock(&gl->gl_spin); 994 995 if (!(gh->gh_flags & GL_ASYNC)) 996 error = gfs2_glock_wait(gh); 997 998 return error; 999 } 1000 1001 /** 1002 * gfs2_glock_poll - poll to see if an async request has been completed 1003 * @gh: the holder 1004 * 1005 * Returns: 1 if the request is ready to be gfs2_glock_wait()ed on 1006 */ 1007 1008 int gfs2_glock_poll(struct gfs2_holder *gh) 1009 { 1010 return test_bit(HIF_WAIT, &gh->gh_iflags) ? 0 : 1; 1011 } 1012 1013 /** 1014 * gfs2_glock_dq - dequeue a struct gfs2_holder from a glock (release a glock) 1015 * @gh: the glock holder 1016 * 1017 */ 1018 1019 void gfs2_glock_dq(struct gfs2_holder *gh) 1020 { 1021 struct gfs2_glock *gl = gh->gh_gl; 1022 const struct gfs2_glock_operations *glops = gl->gl_ops; 1023 unsigned delay = 0; 1024 int fast_path = 0; 1025 1026 spin_lock(&gl->gl_spin); 1027 if (gh->gh_flags & GL_NOCACHE) 1028 handle_callback(gl, LM_ST_UNLOCKED, 0); 1029 1030 list_del_init(&gh->gh_list); 1031 if (find_first_holder(gl) == NULL) { 1032 if (glops->go_unlock) { 1033 GLOCK_BUG_ON(gl, test_and_set_bit(GLF_LOCK, &gl->gl_flags)); 1034 spin_unlock(&gl->gl_spin); 1035 glops->go_unlock(gh); 1036 spin_lock(&gl->gl_spin); 1037 clear_bit(GLF_LOCK, &gl->gl_flags); 1038 } 1039 if (list_empty(&gl->gl_holders) && 1040 !test_bit(GLF_PENDING_DEMOTE, &gl->gl_flags) && 1041 !test_bit(GLF_DEMOTE, &gl->gl_flags)) 1042 fast_path = 1; 1043 } 1044 trace_gfs2_glock_queue(gh, 0); 1045 spin_unlock(&gl->gl_spin); 1046 if (likely(fast_path)) 1047 return; 1048 1049 gfs2_glock_hold(gl); 1050 if (test_bit(GLF_PENDING_DEMOTE, &gl->gl_flags) && 1051 !test_bit(GLF_DEMOTE, &gl->gl_flags)) 1052 delay = gl->gl_ops->go_min_hold_time; 1053 if (queue_delayed_work(glock_workqueue, &gl->gl_work, delay) == 0) 1054 gfs2_glock_put(gl); 1055 } 1056 1057 void gfs2_glock_dq_wait(struct gfs2_holder *gh) 1058 { 1059 struct gfs2_glock *gl = gh->gh_gl; 1060 gfs2_glock_dq(gh); 1061 wait_on_demote(gl); 1062 } 1063 1064 /** 1065 * gfs2_glock_dq_uninit - dequeue a holder from a glock and initialize it 1066 * @gh: the holder structure 1067 * 1068 */ 1069 1070 void gfs2_glock_dq_uninit(struct gfs2_holder *gh) 1071 { 1072 gfs2_glock_dq(gh); 1073 gfs2_holder_uninit(gh); 1074 } 1075 1076 /** 1077 * gfs2_glock_nq_num - acquire a glock based on lock number 1078 * @sdp: the filesystem 1079 * @number: the lock number 1080 * @glops: the glock operations for the type of glock 1081 * @state: the state to acquire the glock in 1082 * @flags: modifier flags for the aquisition 1083 * @gh: the struct gfs2_holder 1084 * 1085 * Returns: errno 1086 */ 1087 1088 int gfs2_glock_nq_num(struct gfs2_sbd *sdp, u64 number, 1089 const struct gfs2_glock_operations *glops, 1090 unsigned int state, int flags, struct gfs2_holder *gh) 1091 { 1092 struct gfs2_glock *gl; 1093 int error; 1094 1095 error = gfs2_glock_get(sdp, number, glops, CREATE, &gl); 1096 if (!error) { 1097 error = gfs2_glock_nq_init(gl, state, flags, gh); 1098 gfs2_glock_put(gl); 1099 } 1100 1101 return error; 1102 } 1103 1104 /** 1105 * glock_compare - Compare two struct gfs2_glock structures for sorting 1106 * @arg_a: the first structure 1107 * @arg_b: the second structure 1108 * 1109 */ 1110 1111 static int glock_compare(const void *arg_a, const void *arg_b) 1112 { 1113 const struct gfs2_holder *gh_a = *(const struct gfs2_holder **)arg_a; 1114 const struct gfs2_holder *gh_b = *(const struct gfs2_holder **)arg_b; 1115 const struct lm_lockname *a = &gh_a->gh_gl->gl_name; 1116 const struct lm_lockname *b = &gh_b->gh_gl->gl_name; 1117 1118 if (a->ln_number > b->ln_number) 1119 return 1; 1120 if (a->ln_number < b->ln_number) 1121 return -1; 1122 BUG_ON(gh_a->gh_gl->gl_ops->go_type == gh_b->gh_gl->gl_ops->go_type); 1123 return 0; 1124 } 1125 1126 /** 1127 * nq_m_sync - synchonously acquire more than one glock in deadlock free order 1128 * @num_gh: the number of structures 1129 * @ghs: an array of struct gfs2_holder structures 1130 * 1131 * Returns: 0 on success (all glocks acquired), 1132 * errno on failure (no glocks acquired) 1133 */ 1134 1135 static int nq_m_sync(unsigned int num_gh, struct gfs2_holder *ghs, 1136 struct gfs2_holder **p) 1137 { 1138 unsigned int x; 1139 int error = 0; 1140 1141 for (x = 0; x < num_gh; x++) 1142 p[x] = &ghs[x]; 1143 1144 sort(p, num_gh, sizeof(struct gfs2_holder *), glock_compare, NULL); 1145 1146 for (x = 0; x < num_gh; x++) { 1147 p[x]->gh_flags &= ~(LM_FLAG_TRY | GL_ASYNC); 1148 1149 error = gfs2_glock_nq(p[x]); 1150 if (error) { 1151 while (x--) 1152 gfs2_glock_dq(p[x]); 1153 break; 1154 } 1155 } 1156 1157 return error; 1158 } 1159 1160 /** 1161 * gfs2_glock_nq_m - acquire multiple glocks 1162 * @num_gh: the number of structures 1163 * @ghs: an array of struct gfs2_holder structures 1164 * 1165 * 1166 * Returns: 0 on success (all glocks acquired), 1167 * errno on failure (no glocks acquired) 1168 */ 1169 1170 int gfs2_glock_nq_m(unsigned int num_gh, struct gfs2_holder *ghs) 1171 { 1172 struct gfs2_holder *tmp[4]; 1173 struct gfs2_holder **pph = tmp; 1174 int error = 0; 1175 1176 switch(num_gh) { 1177 case 0: 1178 return 0; 1179 case 1: 1180 ghs->gh_flags &= ~(LM_FLAG_TRY | GL_ASYNC); 1181 return gfs2_glock_nq(ghs); 1182 default: 1183 if (num_gh <= 4) 1184 break; 1185 pph = kmalloc(num_gh * sizeof(struct gfs2_holder *), GFP_NOFS); 1186 if (!pph) 1187 return -ENOMEM; 1188 } 1189 1190 error = nq_m_sync(num_gh, ghs, pph); 1191 1192 if (pph != tmp) 1193 kfree(pph); 1194 1195 return error; 1196 } 1197 1198 /** 1199 * gfs2_glock_dq_m - release multiple glocks 1200 * @num_gh: the number of structures 1201 * @ghs: an array of struct gfs2_holder structures 1202 * 1203 */ 1204 1205 void gfs2_glock_dq_m(unsigned int num_gh, struct gfs2_holder *ghs) 1206 { 1207 unsigned int x; 1208 1209 for (x = 0; x < num_gh; x++) 1210 gfs2_glock_dq(&ghs[x]); 1211 } 1212 1213 /** 1214 * gfs2_glock_dq_uninit_m - release multiple glocks 1215 * @num_gh: the number of structures 1216 * @ghs: an array of struct gfs2_holder structures 1217 * 1218 */ 1219 1220 void gfs2_glock_dq_uninit_m(unsigned int num_gh, struct gfs2_holder *ghs) 1221 { 1222 unsigned int x; 1223 1224 for (x = 0; x < num_gh; x++) 1225 gfs2_glock_dq_uninit(&ghs[x]); 1226 } 1227 1228 void gfs2_glock_cb(struct gfs2_glock *gl, unsigned int state) 1229 { 1230 unsigned long delay = 0; 1231 unsigned long holdtime; 1232 unsigned long now = jiffies; 1233 1234 gfs2_glock_hold(gl); 1235 holdtime = gl->gl_tchange + gl->gl_ops->go_min_hold_time; 1236 if (time_before(now, holdtime)) 1237 delay = holdtime - now; 1238 if (test_bit(GLF_REPLY_PENDING, &gl->gl_flags)) 1239 delay = gl->gl_ops->go_min_hold_time; 1240 1241 spin_lock(&gl->gl_spin); 1242 handle_callback(gl, state, delay); 1243 spin_unlock(&gl->gl_spin); 1244 if (queue_delayed_work(glock_workqueue, &gl->gl_work, delay) == 0) 1245 gfs2_glock_put(gl); 1246 } 1247 1248 /** 1249 * gfs2_glock_complete - Callback used by locking 1250 * @gl: Pointer to the glock 1251 * @ret: The return value from the dlm 1252 * 1253 */ 1254 1255 void gfs2_glock_complete(struct gfs2_glock *gl, int ret) 1256 { 1257 struct lm_lockstruct *ls = &gl->gl_sbd->sd_lockstruct; 1258 gl->gl_reply = ret; 1259 if (unlikely(test_bit(DFL_BLOCK_LOCKS, &ls->ls_flags))) { 1260 struct gfs2_holder *gh; 1261 spin_lock(&gl->gl_spin); 1262 gh = find_first_waiter(gl); 1263 if ((!(gh && (gh->gh_flags & LM_FLAG_NOEXP)) && 1264 (gl->gl_target != LM_ST_UNLOCKED)) || 1265 ((ret & ~LM_OUT_ST_MASK) != 0)) 1266 set_bit(GLF_FROZEN, &gl->gl_flags); 1267 spin_unlock(&gl->gl_spin); 1268 if (test_bit(GLF_FROZEN, &gl->gl_flags)) 1269 return; 1270 } 1271 set_bit(GLF_REPLY_PENDING, &gl->gl_flags); 1272 gfs2_glock_hold(gl); 1273 if (queue_delayed_work(glock_workqueue, &gl->gl_work, 0) == 0) 1274 gfs2_glock_put(gl); 1275 } 1276 1277 /** 1278 * demote_ok - Check to see if it's ok to unlock a glock 1279 * @gl: the glock 1280 * 1281 * Returns: 1 if it's ok 1282 */ 1283 1284 static int demote_ok(const struct gfs2_glock *gl) 1285 { 1286 const struct gfs2_glock_operations *glops = gl->gl_ops; 1287 1288 if (gl->gl_state == LM_ST_UNLOCKED) 1289 return 0; 1290 if (!list_empty(&gl->gl_holders)) 1291 return 0; 1292 if (glops->go_demote_ok) 1293 return glops->go_demote_ok(gl); 1294 return 1; 1295 } 1296 1297 1298 static int gfs2_shrink_glock_memory(int nr, gfp_t gfp_mask) 1299 { 1300 struct gfs2_glock *gl; 1301 int may_demote; 1302 int nr_skipped = 0; 1303 int got_ref = 0; 1304 LIST_HEAD(skipped); 1305 1306 if (nr == 0) 1307 goto out; 1308 1309 if (!(gfp_mask & __GFP_FS)) 1310 return -1; 1311 1312 spin_lock(&lru_lock); 1313 while(nr && !list_empty(&lru_list)) { 1314 gl = list_entry(lru_list.next, struct gfs2_glock, gl_lru); 1315 list_del_init(&gl->gl_lru); 1316 atomic_dec(&lru_count); 1317 1318 /* Test for being demotable */ 1319 if (!test_and_set_bit(GLF_LOCK, &gl->gl_flags)) { 1320 gfs2_glock_hold(gl); 1321 got_ref = 1; 1322 spin_unlock(&lru_lock); 1323 spin_lock(&gl->gl_spin); 1324 may_demote = demote_ok(gl); 1325 spin_unlock(&gl->gl_spin); 1326 clear_bit(GLF_LOCK, &gl->gl_flags); 1327 if (may_demote) { 1328 handle_callback(gl, LM_ST_UNLOCKED, 0); 1329 nr--; 1330 if (queue_delayed_work(glock_workqueue, &gl->gl_work, 0) == 0) 1331 gfs2_glock_put(gl); 1332 got_ref = 0; 1333 } 1334 spin_lock(&lru_lock); 1335 if (may_demote) 1336 continue; 1337 } 1338 if (list_empty(&gl->gl_lru) && 1339 (atomic_read(&gl->gl_ref) <= (2 + got_ref))) { 1340 nr_skipped++; 1341 list_add(&gl->gl_lru, &skipped); 1342 } 1343 if (got_ref) { 1344 spin_unlock(&lru_lock); 1345 gfs2_glock_put(gl); 1346 spin_lock(&lru_lock); 1347 got_ref = 0; 1348 } 1349 } 1350 list_splice(&skipped, &lru_list); 1351 atomic_add(nr_skipped, &lru_count); 1352 spin_unlock(&lru_lock); 1353 out: 1354 return (atomic_read(&lru_count) / 100) * sysctl_vfs_cache_pressure; 1355 } 1356 1357 static struct shrinker glock_shrinker = { 1358 .shrink = gfs2_shrink_glock_memory, 1359 .seeks = DEFAULT_SEEKS, 1360 }; 1361 1362 /** 1363 * examine_bucket - Call a function for glock in a hash bucket 1364 * @examiner: the function 1365 * @sdp: the filesystem 1366 * @bucket: the bucket 1367 * 1368 * Returns: 1 if the bucket has entries 1369 */ 1370 1371 static int examine_bucket(glock_examiner examiner, struct gfs2_sbd *sdp, 1372 unsigned int hash) 1373 { 1374 struct gfs2_glock *gl, *prev = NULL; 1375 int has_entries = 0; 1376 struct hlist_head *head = &gl_hash_table[hash].hb_list; 1377 1378 read_lock(gl_lock_addr(hash)); 1379 /* Can't use hlist_for_each_entry - don't want prefetch here */ 1380 if (hlist_empty(head)) 1381 goto out; 1382 gl = list_entry(head->first, struct gfs2_glock, gl_list); 1383 while(1) { 1384 if (!sdp || gl->gl_sbd == sdp) { 1385 gfs2_glock_hold(gl); 1386 read_unlock(gl_lock_addr(hash)); 1387 if (prev) 1388 gfs2_glock_put(prev); 1389 prev = gl; 1390 examiner(gl); 1391 has_entries = 1; 1392 read_lock(gl_lock_addr(hash)); 1393 } 1394 if (gl->gl_list.next == NULL) 1395 break; 1396 gl = list_entry(gl->gl_list.next, struct gfs2_glock, gl_list); 1397 } 1398 out: 1399 read_unlock(gl_lock_addr(hash)); 1400 if (prev) 1401 gfs2_glock_put(prev); 1402 cond_resched(); 1403 return has_entries; 1404 } 1405 1406 1407 /** 1408 * thaw_glock - thaw out a glock which has an unprocessed reply waiting 1409 * @gl: The glock to thaw 1410 * 1411 * N.B. When we freeze a glock, we leave a ref to the glock outstanding, 1412 * so this has to result in the ref count being dropped by one. 1413 */ 1414 1415 static void thaw_glock(struct gfs2_glock *gl) 1416 { 1417 if (!test_and_clear_bit(GLF_FROZEN, &gl->gl_flags)) 1418 return; 1419 set_bit(GLF_REPLY_PENDING, &gl->gl_flags); 1420 gfs2_glock_hold(gl); 1421 if (queue_delayed_work(glock_workqueue, &gl->gl_work, 0) == 0) 1422 gfs2_glock_put(gl); 1423 } 1424 1425 /** 1426 * clear_glock - look at a glock and see if we can free it from glock cache 1427 * @gl: the glock to look at 1428 * 1429 */ 1430 1431 static void clear_glock(struct gfs2_glock *gl) 1432 { 1433 spin_lock(&lru_lock); 1434 if (!list_empty(&gl->gl_lru)) { 1435 list_del_init(&gl->gl_lru); 1436 atomic_dec(&lru_count); 1437 } 1438 spin_unlock(&lru_lock); 1439 1440 spin_lock(&gl->gl_spin); 1441 if (find_first_holder(gl) == NULL && gl->gl_state != LM_ST_UNLOCKED) 1442 handle_callback(gl, LM_ST_UNLOCKED, 0); 1443 spin_unlock(&gl->gl_spin); 1444 gfs2_glock_hold(gl); 1445 if (queue_delayed_work(glock_workqueue, &gl->gl_work, 0) == 0) 1446 gfs2_glock_put(gl); 1447 } 1448 1449 /** 1450 * gfs2_glock_thaw - Thaw any frozen glocks 1451 * @sdp: The super block 1452 * 1453 */ 1454 1455 void gfs2_glock_thaw(struct gfs2_sbd *sdp) 1456 { 1457 unsigned x; 1458 1459 for (x = 0; x < GFS2_GL_HASH_SIZE; x++) 1460 examine_bucket(thaw_glock, sdp, x); 1461 } 1462 1463 /** 1464 * gfs2_gl_hash_clear - Empty out the glock hash table 1465 * @sdp: the filesystem 1466 * @wait: wait until it's all gone 1467 * 1468 * Called when unmounting the filesystem. 1469 */ 1470 1471 void gfs2_gl_hash_clear(struct gfs2_sbd *sdp) 1472 { 1473 unsigned long t; 1474 unsigned int x; 1475 int cont; 1476 1477 t = jiffies; 1478 1479 for (;;) { 1480 cont = 0; 1481 for (x = 0; x < GFS2_GL_HASH_SIZE; x++) { 1482 if (examine_bucket(clear_glock, sdp, x)) 1483 cont = 1; 1484 } 1485 1486 if (!cont) 1487 break; 1488 1489 if (time_after_eq(jiffies, 1490 t + gfs2_tune_get(sdp, gt_stall_secs) * HZ)) { 1491 fs_warn(sdp, "Unmount seems to be stalled. " 1492 "Dumping lock state...\n"); 1493 gfs2_dump_lockstate(sdp); 1494 t = jiffies; 1495 } 1496 1497 down_write(&gfs2_umount_flush_sem); 1498 invalidate_inodes(sdp->sd_vfs); 1499 up_write(&gfs2_umount_flush_sem); 1500 msleep(10); 1501 } 1502 } 1503 1504 void gfs2_glock_finish_truncate(struct gfs2_inode *ip) 1505 { 1506 struct gfs2_glock *gl = ip->i_gl; 1507 int ret; 1508 1509 ret = gfs2_truncatei_resume(ip); 1510 gfs2_assert_withdraw(gl->gl_sbd, ret == 0); 1511 1512 spin_lock(&gl->gl_spin); 1513 clear_bit(GLF_LOCK, &gl->gl_flags); 1514 run_queue(gl, 1); 1515 spin_unlock(&gl->gl_spin); 1516 } 1517 1518 static const char *state2str(unsigned state) 1519 { 1520 switch(state) { 1521 case LM_ST_UNLOCKED: 1522 return "UN"; 1523 case LM_ST_SHARED: 1524 return "SH"; 1525 case LM_ST_DEFERRED: 1526 return "DF"; 1527 case LM_ST_EXCLUSIVE: 1528 return "EX"; 1529 } 1530 return "??"; 1531 } 1532 1533 static const char *hflags2str(char *buf, unsigned flags, unsigned long iflags) 1534 { 1535 char *p = buf; 1536 if (flags & LM_FLAG_TRY) 1537 *p++ = 't'; 1538 if (flags & LM_FLAG_TRY_1CB) 1539 *p++ = 'T'; 1540 if (flags & LM_FLAG_NOEXP) 1541 *p++ = 'e'; 1542 if (flags & LM_FLAG_ANY) 1543 *p++ = 'A'; 1544 if (flags & LM_FLAG_PRIORITY) 1545 *p++ = 'p'; 1546 if (flags & GL_ASYNC) 1547 *p++ = 'a'; 1548 if (flags & GL_EXACT) 1549 *p++ = 'E'; 1550 if (flags & GL_NOCACHE) 1551 *p++ = 'c'; 1552 if (test_bit(HIF_HOLDER, &iflags)) 1553 *p++ = 'H'; 1554 if (test_bit(HIF_WAIT, &iflags)) 1555 *p++ = 'W'; 1556 if (test_bit(HIF_FIRST, &iflags)) 1557 *p++ = 'F'; 1558 *p = 0; 1559 return buf; 1560 } 1561 1562 /** 1563 * dump_holder - print information about a glock holder 1564 * @seq: the seq_file struct 1565 * @gh: the glock holder 1566 * 1567 * Returns: 0 on success, -ENOBUFS when we run out of space 1568 */ 1569 1570 static int dump_holder(struct seq_file *seq, const struct gfs2_holder *gh) 1571 { 1572 struct task_struct *gh_owner = NULL; 1573 char buffer[KSYM_SYMBOL_LEN]; 1574 char flags_buf[32]; 1575 1576 sprint_symbol(buffer, gh->gh_ip); 1577 if (gh->gh_owner_pid) 1578 gh_owner = pid_task(gh->gh_owner_pid, PIDTYPE_PID); 1579 gfs2_print_dbg(seq, " H: s:%s f:%s e:%d p:%ld [%s] %s\n", 1580 state2str(gh->gh_state), 1581 hflags2str(flags_buf, gh->gh_flags, gh->gh_iflags), 1582 gh->gh_error, 1583 gh->gh_owner_pid ? (long)pid_nr(gh->gh_owner_pid) : -1, 1584 gh_owner ? gh_owner->comm : "(ended)", buffer); 1585 return 0; 1586 } 1587 1588 static const char *gflags2str(char *buf, const unsigned long *gflags) 1589 { 1590 char *p = buf; 1591 if (test_bit(GLF_LOCK, gflags)) 1592 *p++ = 'l'; 1593 if (test_bit(GLF_DEMOTE, gflags)) 1594 *p++ = 'D'; 1595 if (test_bit(GLF_PENDING_DEMOTE, gflags)) 1596 *p++ = 'd'; 1597 if (test_bit(GLF_DEMOTE_IN_PROGRESS, gflags)) 1598 *p++ = 'p'; 1599 if (test_bit(GLF_DIRTY, gflags)) 1600 *p++ = 'y'; 1601 if (test_bit(GLF_LFLUSH, gflags)) 1602 *p++ = 'f'; 1603 if (test_bit(GLF_INVALIDATE_IN_PROGRESS, gflags)) 1604 *p++ = 'i'; 1605 if (test_bit(GLF_REPLY_PENDING, gflags)) 1606 *p++ = 'r'; 1607 if (test_bit(GLF_INITIAL, gflags)) 1608 *p++ = 'I'; 1609 if (test_bit(GLF_FROZEN, gflags)) 1610 *p++ = 'F'; 1611 *p = 0; 1612 return buf; 1613 } 1614 1615 /** 1616 * __dump_glock - print information about a glock 1617 * @seq: The seq_file struct 1618 * @gl: the glock 1619 * 1620 * The file format is as follows: 1621 * One line per object, capital letters are used to indicate objects 1622 * G = glock, I = Inode, R = rgrp, H = holder. Glocks are not indented, 1623 * other objects are indented by a single space and follow the glock to 1624 * which they are related. Fields are indicated by lower case letters 1625 * followed by a colon and the field value, except for strings which are in 1626 * [] so that its possible to see if they are composed of spaces for 1627 * example. The field's are n = number (id of the object), f = flags, 1628 * t = type, s = state, r = refcount, e = error, p = pid. 1629 * 1630 * Returns: 0 on success, -ENOBUFS when we run out of space 1631 */ 1632 1633 static int __dump_glock(struct seq_file *seq, const struct gfs2_glock *gl) 1634 { 1635 const struct gfs2_glock_operations *glops = gl->gl_ops; 1636 unsigned long long dtime; 1637 const struct gfs2_holder *gh; 1638 char gflags_buf[32]; 1639 int error = 0; 1640 1641 dtime = jiffies - gl->gl_demote_time; 1642 dtime *= 1000000/HZ; /* demote time in uSec */ 1643 if (!test_bit(GLF_DEMOTE, &gl->gl_flags)) 1644 dtime = 0; 1645 gfs2_print_dbg(seq, "G: s:%s n:%u/%llu f:%s t:%s d:%s/%llu a:%d r:%d\n", 1646 state2str(gl->gl_state), 1647 gl->gl_name.ln_type, 1648 (unsigned long long)gl->gl_name.ln_number, 1649 gflags2str(gflags_buf, &gl->gl_flags), 1650 state2str(gl->gl_target), 1651 state2str(gl->gl_demote_state), dtime, 1652 atomic_read(&gl->gl_ail_count), 1653 atomic_read(&gl->gl_ref)); 1654 1655 list_for_each_entry(gh, &gl->gl_holders, gh_list) { 1656 error = dump_holder(seq, gh); 1657 if (error) 1658 goto out; 1659 } 1660 if (gl->gl_state != LM_ST_UNLOCKED && glops->go_dump) 1661 error = glops->go_dump(seq, gl); 1662 out: 1663 return error; 1664 } 1665 1666 static int dump_glock(struct seq_file *seq, struct gfs2_glock *gl) 1667 { 1668 int ret; 1669 spin_lock(&gl->gl_spin); 1670 ret = __dump_glock(seq, gl); 1671 spin_unlock(&gl->gl_spin); 1672 return ret; 1673 } 1674 1675 /** 1676 * gfs2_dump_lockstate - print out the current lockstate 1677 * @sdp: the filesystem 1678 * @ub: the buffer to copy the information into 1679 * 1680 * If @ub is NULL, dump the lockstate to the console. 1681 * 1682 */ 1683 1684 static int gfs2_dump_lockstate(struct gfs2_sbd *sdp) 1685 { 1686 struct gfs2_glock *gl; 1687 struct hlist_node *h; 1688 unsigned int x; 1689 int error = 0; 1690 1691 for (x = 0; x < GFS2_GL_HASH_SIZE; x++) { 1692 1693 read_lock(gl_lock_addr(x)); 1694 1695 hlist_for_each_entry(gl, h, &gl_hash_table[x].hb_list, gl_list) { 1696 if (gl->gl_sbd != sdp) 1697 continue; 1698 1699 error = dump_glock(NULL, gl); 1700 if (error) 1701 break; 1702 } 1703 1704 read_unlock(gl_lock_addr(x)); 1705 1706 if (error) 1707 break; 1708 } 1709 1710 1711 return error; 1712 } 1713 1714 1715 int __init gfs2_glock_init(void) 1716 { 1717 unsigned i; 1718 for(i = 0; i < GFS2_GL_HASH_SIZE; i++) { 1719 INIT_HLIST_HEAD(&gl_hash_table[i].hb_list); 1720 } 1721 #ifdef GL_HASH_LOCK_SZ 1722 for(i = 0; i < GL_HASH_LOCK_SZ; i++) { 1723 rwlock_init(&gl_hash_locks[i]); 1724 } 1725 #endif 1726 1727 glock_workqueue = create_workqueue("glock_workqueue"); 1728 if (IS_ERR(glock_workqueue)) 1729 return PTR_ERR(glock_workqueue); 1730 1731 register_shrinker(&glock_shrinker); 1732 1733 return 0; 1734 } 1735 1736 void gfs2_glock_exit(void) 1737 { 1738 unregister_shrinker(&glock_shrinker); 1739 destroy_workqueue(glock_workqueue); 1740 } 1741 1742 static int gfs2_glock_iter_next(struct gfs2_glock_iter *gi) 1743 { 1744 struct gfs2_glock *gl; 1745 1746 restart: 1747 read_lock(gl_lock_addr(gi->hash)); 1748 gl = gi->gl; 1749 if (gl) { 1750 gi->gl = hlist_entry(gl->gl_list.next, 1751 struct gfs2_glock, gl_list); 1752 } else { 1753 gi->gl = hlist_entry(gl_hash_table[gi->hash].hb_list.first, 1754 struct gfs2_glock, gl_list); 1755 } 1756 if (gi->gl) 1757 gfs2_glock_hold(gi->gl); 1758 read_unlock(gl_lock_addr(gi->hash)); 1759 if (gl) 1760 gfs2_glock_put(gl); 1761 while (gi->gl == NULL) { 1762 gi->hash++; 1763 if (gi->hash >= GFS2_GL_HASH_SIZE) 1764 return 1; 1765 read_lock(gl_lock_addr(gi->hash)); 1766 gi->gl = hlist_entry(gl_hash_table[gi->hash].hb_list.first, 1767 struct gfs2_glock, gl_list); 1768 if (gi->gl) 1769 gfs2_glock_hold(gi->gl); 1770 read_unlock(gl_lock_addr(gi->hash)); 1771 } 1772 1773 if (gi->sdp != gi->gl->gl_sbd) 1774 goto restart; 1775 1776 return 0; 1777 } 1778 1779 static void gfs2_glock_iter_free(struct gfs2_glock_iter *gi) 1780 { 1781 if (gi->gl) 1782 gfs2_glock_put(gi->gl); 1783 gi->gl = NULL; 1784 } 1785 1786 static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos) 1787 { 1788 struct gfs2_glock_iter *gi = seq->private; 1789 loff_t n = *pos; 1790 1791 gi->hash = 0; 1792 1793 do { 1794 if (gfs2_glock_iter_next(gi)) { 1795 gfs2_glock_iter_free(gi); 1796 return NULL; 1797 } 1798 } while (n--); 1799 1800 return gi->gl; 1801 } 1802 1803 static void *gfs2_glock_seq_next(struct seq_file *seq, void *iter_ptr, 1804 loff_t *pos) 1805 { 1806 struct gfs2_glock_iter *gi = seq->private; 1807 1808 (*pos)++; 1809 1810 if (gfs2_glock_iter_next(gi)) { 1811 gfs2_glock_iter_free(gi); 1812 return NULL; 1813 } 1814 1815 return gi->gl; 1816 } 1817 1818 static void gfs2_glock_seq_stop(struct seq_file *seq, void *iter_ptr) 1819 { 1820 struct gfs2_glock_iter *gi = seq->private; 1821 gfs2_glock_iter_free(gi); 1822 } 1823 1824 static int gfs2_glock_seq_show(struct seq_file *seq, void *iter_ptr) 1825 { 1826 return dump_glock(seq, iter_ptr); 1827 } 1828 1829 static const struct seq_operations gfs2_glock_seq_ops = { 1830 .start = gfs2_glock_seq_start, 1831 .next = gfs2_glock_seq_next, 1832 .stop = gfs2_glock_seq_stop, 1833 .show = gfs2_glock_seq_show, 1834 }; 1835 1836 static int gfs2_debugfs_open(struct inode *inode, struct file *file) 1837 { 1838 int ret = seq_open_private(file, &gfs2_glock_seq_ops, 1839 sizeof(struct gfs2_glock_iter)); 1840 if (ret == 0) { 1841 struct seq_file *seq = file->private_data; 1842 struct gfs2_glock_iter *gi = seq->private; 1843 gi->sdp = inode->i_private; 1844 } 1845 return ret; 1846 } 1847 1848 static const struct file_operations gfs2_debug_fops = { 1849 .owner = THIS_MODULE, 1850 .open = gfs2_debugfs_open, 1851 .read = seq_read, 1852 .llseek = seq_lseek, 1853 .release = seq_release_private, 1854 }; 1855 1856 int gfs2_create_debugfs_file(struct gfs2_sbd *sdp) 1857 { 1858 sdp->debugfs_dir = debugfs_create_dir(sdp->sd_table_name, gfs2_root); 1859 if (!sdp->debugfs_dir) 1860 return -ENOMEM; 1861 sdp->debugfs_dentry_glocks = debugfs_create_file("glocks", 1862 S_IFREG | S_IRUGO, 1863 sdp->debugfs_dir, sdp, 1864 &gfs2_debug_fops); 1865 if (!sdp->debugfs_dentry_glocks) 1866 return -ENOMEM; 1867 1868 return 0; 1869 } 1870 1871 void gfs2_delete_debugfs_file(struct gfs2_sbd *sdp) 1872 { 1873 if (sdp && sdp->debugfs_dir) { 1874 if (sdp->debugfs_dentry_glocks) { 1875 debugfs_remove(sdp->debugfs_dentry_glocks); 1876 sdp->debugfs_dentry_glocks = NULL; 1877 } 1878 debugfs_remove(sdp->debugfs_dir); 1879 sdp->debugfs_dir = NULL; 1880 } 1881 } 1882 1883 int gfs2_register_debugfs(void) 1884 { 1885 gfs2_root = debugfs_create_dir("gfs2", NULL); 1886 return gfs2_root ? 0 : -ENOMEM; 1887 } 1888 1889 void gfs2_unregister_debugfs(void) 1890 { 1891 debugfs_remove(gfs2_root); 1892 gfs2_root = NULL; 1893 } 1894