0001
0002
0003
0004
0005
0006
0007 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0008
0009 #include <linux/sched.h>
0010 #include <linux/slab.h>
0011 #include <linux/spinlock.h>
0012 #include <linux/buffer_head.h>
0013 #include <linux/delay.h>
0014 #include <linux/sort.h>
0015 #include <linux/hash.h>
0016 #include <linux/jhash.h>
0017 #include <linux/kallsyms.h>
0018 #include <linux/gfs2_ondisk.h>
0019 #include <linux/list.h>
0020 #include <linux/wait.h>
0021 #include <linux/module.h>
0022 #include <linux/uaccess.h>
0023 #include <linux/seq_file.h>
0024 #include <linux/debugfs.h>
0025 #include <linux/kthread.h>
0026 #include <linux/freezer.h>
0027 #include <linux/workqueue.h>
0028 #include <linux/jiffies.h>
0029 #include <linux/rcupdate.h>
0030 #include <linux/rculist_bl.h>
0031 #include <linux/bit_spinlock.h>
0032 #include <linux/percpu.h>
0033 #include <linux/list_sort.h>
0034 #include <linux/lockref.h>
0035 #include <linux/rhashtable.h>
0036
0037 #include "gfs2.h"
0038 #include "incore.h"
0039 #include "glock.h"
0040 #include "glops.h"
0041 #include "inode.h"
0042 #include "lops.h"
0043 #include "meta_io.h"
0044 #include "quota.h"
0045 #include "super.h"
0046 #include "util.h"
0047 #include "bmap.h"
0048 #define CREATE_TRACE_POINTS
0049 #include "trace_gfs2.h"
0050
0051 struct gfs2_glock_iter {
0052 struct gfs2_sbd *sdp;
0053 struct rhashtable_iter hti;
0054 struct gfs2_glock *gl;
0055 loff_t last_pos;
0056 };
0057
0058 typedef void (*glock_examiner) (struct gfs2_glock * gl);
0059
0060 static void do_xmote(struct gfs2_glock *gl, struct gfs2_holder *gh, unsigned int target);
0061 static void __gfs2_glock_dq(struct gfs2_holder *gh);
0062
0063 static struct dentry *gfs2_root;
0064 static struct workqueue_struct *glock_workqueue;
0065 struct workqueue_struct *gfs2_delete_workqueue;
0066 static LIST_HEAD(lru_list);
0067 static atomic_t lru_count = ATOMIC_INIT(0);
0068 static DEFINE_SPINLOCK(lru_lock);
0069
0070 #define GFS2_GL_HASH_SHIFT 15
0071 #define GFS2_GL_HASH_SIZE BIT(GFS2_GL_HASH_SHIFT)
0072
0073 static const struct rhashtable_params ht_parms = {
0074 .nelem_hint = GFS2_GL_HASH_SIZE * 3 / 4,
0075 .key_len = offsetofend(struct lm_lockname, ln_type),
0076 .key_offset = offsetof(struct gfs2_glock, gl_name),
0077 .head_offset = offsetof(struct gfs2_glock, gl_node),
0078 };
0079
0080 static struct rhashtable gl_hash_table;
0081
0082 #define GLOCK_WAIT_TABLE_BITS 12
0083 #define GLOCK_WAIT_TABLE_SIZE (1 << GLOCK_WAIT_TABLE_BITS)
0084 static wait_queue_head_t glock_wait_table[GLOCK_WAIT_TABLE_SIZE] __cacheline_aligned;
0085
0086 struct wait_glock_queue {
0087 struct lm_lockname *name;
0088 wait_queue_entry_t wait;
0089 };
0090
0091 static int glock_wake_function(wait_queue_entry_t *wait, unsigned int mode,
0092 int sync, void *key)
0093 {
0094 struct wait_glock_queue *wait_glock =
0095 container_of(wait, struct wait_glock_queue, wait);
0096 struct lm_lockname *wait_name = wait_glock->name;
0097 struct lm_lockname *wake_name = key;
0098
0099 if (wake_name->ln_sbd != wait_name->ln_sbd ||
0100 wake_name->ln_number != wait_name->ln_number ||
0101 wake_name->ln_type != wait_name->ln_type)
0102 return 0;
0103 return autoremove_wake_function(wait, mode, sync, key);
0104 }
0105
0106 static wait_queue_head_t *glock_waitqueue(struct lm_lockname *name)
0107 {
0108 u32 hash = jhash2((u32 *)name, ht_parms.key_len / 4, 0);
0109
0110 return glock_wait_table + hash_32(hash, GLOCK_WAIT_TABLE_BITS);
0111 }
0112
0113
0114
0115
0116
0117 static void wake_up_glock(struct gfs2_glock *gl)
0118 {
0119 wait_queue_head_t *wq = glock_waitqueue(&gl->gl_name);
0120
0121 if (waitqueue_active(wq))
0122 __wake_up(wq, TASK_NORMAL, 1, &gl->gl_name);
0123 }
0124
0125 static void gfs2_glock_dealloc(struct rcu_head *rcu)
0126 {
0127 struct gfs2_glock *gl = container_of(rcu, struct gfs2_glock, gl_rcu);
0128
0129 kfree(gl->gl_lksb.sb_lvbptr);
0130 if (gl->gl_ops->go_flags & GLOF_ASPACE) {
0131 struct gfs2_glock_aspace *gla =
0132 container_of(gl, struct gfs2_glock_aspace, glock);
0133 kmem_cache_free(gfs2_glock_aspace_cachep, gla);
0134 } else
0135 kmem_cache_free(gfs2_glock_cachep, gl);
0136 }
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151 static bool glock_blocked_by_withdraw(struct gfs2_glock *gl)
0152 {
0153 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
0154
0155 if (likely(!gfs2_withdrawn(sdp)))
0156 return false;
0157 if (gl->gl_ops->go_flags & GLOF_NONDISK)
0158 return false;
0159 if (!sdp->sd_jdesc ||
0160 gl->gl_name.ln_number == sdp->sd_jdesc->jd_no_addr)
0161 return false;
0162 return true;
0163 }
0164
0165 void gfs2_glock_free(struct gfs2_glock *gl)
0166 {
0167 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
0168
0169 gfs2_glock_assert_withdraw(gl, atomic_read(&gl->gl_revokes) == 0);
0170 rhashtable_remove_fast(&gl_hash_table, &gl->gl_node, ht_parms);
0171 smp_mb();
0172 wake_up_glock(gl);
0173 call_rcu(&gl->gl_rcu, gfs2_glock_dealloc);
0174 if (atomic_dec_and_test(&sdp->sd_glock_disposal))
0175 wake_up(&sdp->sd_glock_wait);
0176 }
0177
0178
0179
0180
0181
0182
0183
0184 void gfs2_glock_hold(struct gfs2_glock *gl)
0185 {
0186 GLOCK_BUG_ON(gl, __lockref_is_dead(&gl->gl_lockref));
0187 lockref_get(&gl->gl_lockref);
0188 }
0189
0190
0191
0192
0193
0194
0195
0196
0197 static int demote_ok(const struct gfs2_glock *gl)
0198 {
0199 const struct gfs2_glock_operations *glops = gl->gl_ops;
0200
0201 if (gl->gl_state == LM_ST_UNLOCKED)
0202 return 0;
0203
0204
0205
0206
0207
0208
0209 if (!list_empty(&gl->gl_holders))
0210 return 0;
0211 if (glops->go_demote_ok)
0212 return glops->go_demote_ok(gl);
0213 return 1;
0214 }
0215
0216
0217 void gfs2_glock_add_to_lru(struct gfs2_glock *gl)
0218 {
0219 if (!(gl->gl_ops->go_flags & GLOF_LRU))
0220 return;
0221
0222 spin_lock(&lru_lock);
0223
0224 list_move_tail(&gl->gl_lru, &lru_list);
0225
0226 if (!test_bit(GLF_LRU, &gl->gl_flags)) {
0227 set_bit(GLF_LRU, &gl->gl_flags);
0228 atomic_inc(&lru_count);
0229 }
0230
0231 spin_unlock(&lru_lock);
0232 }
0233
0234 static void gfs2_glock_remove_from_lru(struct gfs2_glock *gl)
0235 {
0236 if (!(gl->gl_ops->go_flags & GLOF_LRU))
0237 return;
0238
0239 spin_lock(&lru_lock);
0240 if (test_bit(GLF_LRU, &gl->gl_flags)) {
0241 list_del_init(&gl->gl_lru);
0242 atomic_dec(&lru_count);
0243 clear_bit(GLF_LRU, &gl->gl_flags);
0244 }
0245 spin_unlock(&lru_lock);
0246 }
0247
0248
0249
0250
0251
0252 static void __gfs2_glock_queue_work(struct gfs2_glock *gl, unsigned long delay) {
0253 if (!queue_delayed_work(glock_workqueue, &gl->gl_work, delay)) {
0254
0255
0256
0257
0258
0259
0260 GLOCK_BUG_ON(gl, gl->gl_lockref.count < 2);
0261 gl->gl_lockref.count--;
0262 }
0263 }
0264
0265 static void gfs2_glock_queue_work(struct gfs2_glock *gl, unsigned long delay) {
0266 spin_lock(&gl->gl_lockref.lock);
0267 __gfs2_glock_queue_work(gl, delay);
0268 spin_unlock(&gl->gl_lockref.lock);
0269 }
0270
0271 static void __gfs2_glock_put(struct gfs2_glock *gl)
0272 {
0273 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
0274 struct address_space *mapping = gfs2_glock2aspace(gl);
0275
0276 lockref_mark_dead(&gl->gl_lockref);
0277
0278 gfs2_glock_remove_from_lru(gl);
0279 spin_unlock(&gl->gl_lockref.lock);
0280 GLOCK_BUG_ON(gl, !list_empty(&gl->gl_holders));
0281 if (mapping) {
0282 truncate_inode_pages_final(mapping);
0283 if (!gfs2_withdrawn(sdp))
0284 GLOCK_BUG_ON(gl, !mapping_empty(mapping));
0285 }
0286 trace_gfs2_glock_put(gl);
0287 sdp->sd_lockstruct.ls_ops->lm_put_lock(gl);
0288 }
0289
0290
0291
0292
0293 void gfs2_glock_queue_put(struct gfs2_glock *gl)
0294 {
0295 gfs2_glock_queue_work(gl, 0);
0296 }
0297
0298
0299
0300
0301
0302
0303
0304 void gfs2_glock_put(struct gfs2_glock *gl)
0305 {
0306 if (lockref_put_or_lock(&gl->gl_lockref))
0307 return;
0308
0309 __gfs2_glock_put(gl);
0310 }
0311
0312
0313
0314
0315
0316
0317
0318
0319
0320
0321
0322
0323
0324
0325
0326 static inline bool may_grant(struct gfs2_glock *gl,
0327 struct gfs2_holder *current_gh,
0328 struct gfs2_holder *gh)
0329 {
0330 if (current_gh) {
0331 GLOCK_BUG_ON(gl, !test_bit(HIF_HOLDER, ¤t_gh->gh_iflags));
0332
0333 switch(current_gh->gh_state) {
0334 case LM_ST_EXCLUSIVE:
0335
0336
0337
0338
0339
0340
0341
0342 return gh->gh_state == LM_ST_EXCLUSIVE &&
0343 (current_gh->gh_flags & LM_FLAG_NODE_SCOPE) &&
0344 (gh->gh_flags & LM_FLAG_NODE_SCOPE);
0345
0346 case LM_ST_SHARED:
0347 case LM_ST_DEFERRED:
0348 return gh->gh_state == current_gh->gh_state;
0349
0350 default:
0351 return false;
0352 }
0353 }
0354
0355 if (gl->gl_state == gh->gh_state)
0356 return true;
0357 if (gh->gh_flags & GL_EXACT)
0358 return false;
0359 if (gl->gl_state == LM_ST_EXCLUSIVE) {
0360 return gh->gh_state == LM_ST_SHARED ||
0361 gh->gh_state == LM_ST_DEFERRED;
0362 }
0363 if (gh->gh_flags & LM_FLAG_ANY)
0364 return gl->gl_state != LM_ST_UNLOCKED;
0365 return false;
0366 }
0367
0368 static void gfs2_holder_wake(struct gfs2_holder *gh)
0369 {
0370 clear_bit(HIF_WAIT, &gh->gh_iflags);
0371 smp_mb__after_atomic();
0372 wake_up_bit(&gh->gh_iflags, HIF_WAIT);
0373 if (gh->gh_flags & GL_ASYNC) {
0374 struct gfs2_sbd *sdp = gh->gh_gl->gl_name.ln_sbd;
0375
0376 wake_up(&sdp->sd_async_glock_wait);
0377 }
0378 }
0379
0380
0381
0382
0383
0384
0385
0386 static void do_error(struct gfs2_glock *gl, const int ret)
0387 {
0388 struct gfs2_holder *gh, *tmp;
0389
0390 list_for_each_entry_safe(gh, tmp, &gl->gl_holders, gh_list) {
0391 if (!test_bit(HIF_WAIT, &gh->gh_iflags))
0392 continue;
0393 if (ret & LM_OUT_ERROR)
0394 gh->gh_error = -EIO;
0395 else if (gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB))
0396 gh->gh_error = GLR_TRYFAILED;
0397 else
0398 continue;
0399 list_del_init(&gh->gh_list);
0400 trace_gfs2_glock_queue(gh, 0);
0401 gfs2_holder_wake(gh);
0402 }
0403 }
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413 static void demote_incompat_holders(struct gfs2_glock *gl,
0414 struct gfs2_holder *current_gh)
0415 {
0416 struct gfs2_holder *gh, *tmp;
0417
0418
0419
0420
0421
0422
0423 list_for_each_entry_safe(gh, tmp, &gl->gl_holders, gh_list) {
0424
0425
0426
0427
0428 if (!test_bit(HIF_HOLDER, &gh->gh_iflags))
0429 return;
0430 if (gh == current_gh)
0431 continue;
0432 if (test_bit(HIF_MAY_DEMOTE, &gh->gh_iflags) &&
0433 !may_grant(gl, current_gh, gh)) {
0434
0435
0436
0437
0438
0439 __gfs2_glock_dq(gh);
0440 }
0441 }
0442 }
0443
0444
0445
0446
0447
0448
0449 static inline struct gfs2_holder *find_first_holder(const struct gfs2_glock *gl)
0450 {
0451 struct gfs2_holder *gh;
0452
0453 if (!list_empty(&gl->gl_holders)) {
0454 gh = list_first_entry(&gl->gl_holders, struct gfs2_holder,
0455 gh_list);
0456 if (test_bit(HIF_HOLDER, &gh->gh_iflags))
0457 return gh;
0458 }
0459 return NULL;
0460 }
0461
0462
0463
0464
0465
0466
0467
0468 static inline struct gfs2_holder *
0469 find_first_strong_holder(struct gfs2_glock *gl)
0470 {
0471 struct gfs2_holder *gh;
0472
0473 list_for_each_entry(gh, &gl->gl_holders, gh_list) {
0474 if (!test_bit(HIF_HOLDER, &gh->gh_iflags))
0475 return NULL;
0476 if (!test_bit(HIF_MAY_DEMOTE, &gh->gh_iflags))
0477 return gh;
0478 }
0479 return NULL;
0480 }
0481
0482
0483
0484
0485
0486
0487
0488 int gfs2_instantiate(struct gfs2_holder *gh)
0489 {
0490 struct gfs2_glock *gl = gh->gh_gl;
0491 const struct gfs2_glock_operations *glops = gl->gl_ops;
0492 int ret;
0493
0494 again:
0495 if (!test_bit(GLF_INSTANTIATE_NEEDED, &gl->gl_flags))
0496 goto done;
0497
0498
0499
0500
0501
0502 if (test_and_set_bit(GLF_INSTANTIATE_IN_PROG, &gl->gl_flags)) {
0503 wait_on_bit(&gl->gl_flags, GLF_INSTANTIATE_IN_PROG,
0504 TASK_UNINTERRUPTIBLE);
0505
0506
0507
0508
0509
0510
0511
0512 goto again;
0513 }
0514
0515 ret = glops->go_instantiate(gl);
0516 if (!ret)
0517 clear_bit(GLF_INSTANTIATE_NEEDED, &gl->gl_flags);
0518 clear_and_wake_up_bit(GLF_INSTANTIATE_IN_PROG, &gl->gl_flags);
0519 if (ret)
0520 return ret;
0521
0522 done:
0523 if (glops->go_held)
0524 return glops->go_held(gh);
0525 return 0;
0526 }
0527
0528
0529
0530
0531
0532
0533
0534
0535 static int do_promote(struct gfs2_glock *gl)
0536 {
0537 struct gfs2_holder *gh, *current_gh;
0538 bool incompat_holders_demoted = false;
0539
0540 current_gh = find_first_strong_holder(gl);
0541 list_for_each_entry(gh, &gl->gl_holders, gh_list) {
0542 if (test_bit(HIF_HOLDER, &gh->gh_iflags))
0543 continue;
0544 if (!may_grant(gl, current_gh, gh)) {
0545
0546
0547
0548
0549
0550
0551 if (list_is_first(&gh->gh_list, &gl->gl_holders))
0552 return 1;
0553 do_error(gl, 0);
0554 break;
0555 }
0556 set_bit(HIF_HOLDER, &gh->gh_iflags);
0557 trace_gfs2_promote(gh);
0558 gfs2_holder_wake(gh);
0559 if (!incompat_holders_demoted) {
0560 current_gh = gh;
0561 demote_incompat_holders(gl, current_gh);
0562 incompat_holders_demoted = true;
0563 }
0564 }
0565 return 0;
0566 }
0567
0568
0569
0570
0571
0572
0573 static inline struct gfs2_holder *find_first_waiter(const struct gfs2_glock *gl)
0574 {
0575 struct gfs2_holder *gh;
0576
0577 list_for_each_entry(gh, &gl->gl_holders, gh_list) {
0578 if (!test_bit(HIF_HOLDER, &gh->gh_iflags))
0579 return gh;
0580 }
0581 return NULL;
0582 }
0583
0584
0585
0586
0587
0588
0589
0590 static void state_change(struct gfs2_glock *gl, unsigned int new_state)
0591 {
0592 int held1, held2;
0593
0594 held1 = (gl->gl_state != LM_ST_UNLOCKED);
0595 held2 = (new_state != LM_ST_UNLOCKED);
0596
0597 if (held1 != held2) {
0598 GLOCK_BUG_ON(gl, __lockref_is_dead(&gl->gl_lockref));
0599 if (held2)
0600 gl->gl_lockref.count++;
0601 else
0602 gl->gl_lockref.count--;
0603 }
0604 if (new_state != gl->gl_target)
0605
0606 gl->gl_hold_time = max(gl->gl_hold_time - GL_GLOCK_HOLD_DECR,
0607 GL_GLOCK_MIN_HOLD);
0608 gl->gl_state = new_state;
0609 gl->gl_tchange = jiffies;
0610 }
0611
0612 static void gfs2_set_demote(struct gfs2_glock *gl)
0613 {
0614 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
0615
0616 set_bit(GLF_DEMOTE, &gl->gl_flags);
0617 smp_mb();
0618 wake_up(&sdp->sd_async_glock_wait);
0619 }
0620
0621 static void gfs2_demote_wake(struct gfs2_glock *gl)
0622 {
0623 gl->gl_demote_state = LM_ST_EXCLUSIVE;
0624 clear_bit(GLF_DEMOTE, &gl->gl_flags);
0625 smp_mb__after_atomic();
0626 wake_up_bit(&gl->gl_flags, GLF_DEMOTE);
0627 }
0628
0629
0630
0631
0632
0633
0634
0635
0636 static void finish_xmote(struct gfs2_glock *gl, unsigned int ret)
0637 {
0638 const struct gfs2_glock_operations *glops = gl->gl_ops;
0639 struct gfs2_holder *gh;
0640 unsigned state = ret & LM_OUT_ST_MASK;
0641
0642 spin_lock(&gl->gl_lockref.lock);
0643 trace_gfs2_glock_state_change(gl, state);
0644 state_change(gl, state);
0645 gh = find_first_waiter(gl);
0646
0647
0648 if (test_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags) &&
0649 state != LM_ST_UNLOCKED && gl->gl_demote_state == LM_ST_UNLOCKED)
0650 gl->gl_target = LM_ST_UNLOCKED;
0651
0652
0653 if (unlikely(state != gl->gl_target)) {
0654 if (gh && (ret & LM_OUT_CANCELED))
0655 gfs2_holder_wake(gh);
0656 if (gh && !test_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags)) {
0657
0658 if (ret & LM_OUT_CANCELED) {
0659 if ((gh->gh_flags & LM_FLAG_PRIORITY) == 0)
0660 list_move_tail(&gh->gh_list, &gl->gl_holders);
0661 gh = find_first_waiter(gl);
0662 gl->gl_target = gh->gh_state;
0663 goto retry;
0664 }
0665
0666 if ((ret & LM_OUT_ERROR) ||
0667 (gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB))) {
0668 gl->gl_target = gl->gl_state;
0669 do_error(gl, ret);
0670 goto out;
0671 }
0672 }
0673 switch(state) {
0674
0675 case LM_ST_UNLOCKED:
0676 retry:
0677 do_xmote(gl, gh, gl->gl_target);
0678 break;
0679
0680 case LM_ST_SHARED:
0681 case LM_ST_DEFERRED:
0682 do_xmote(gl, gh, LM_ST_UNLOCKED);
0683 break;
0684 default:
0685 fs_err(gl->gl_name.ln_sbd, "wanted %u got %u\n",
0686 gl->gl_target, state);
0687 GLOCK_BUG_ON(gl, 1);
0688 }
0689 spin_unlock(&gl->gl_lockref.lock);
0690 return;
0691 }
0692
0693
0694 if (test_and_clear_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags))
0695 gfs2_demote_wake(gl);
0696 if (state != LM_ST_UNLOCKED) {
0697 if (glops->go_xmote_bh) {
0698 int rv;
0699
0700 spin_unlock(&gl->gl_lockref.lock);
0701 rv = glops->go_xmote_bh(gl);
0702 spin_lock(&gl->gl_lockref.lock);
0703 if (rv) {
0704 do_error(gl, rv);
0705 goto out;
0706 }
0707 }
0708 do_promote(gl);
0709 }
0710 out:
0711 clear_bit(GLF_LOCK, &gl->gl_flags);
0712 spin_unlock(&gl->gl_lockref.lock);
0713 }
0714
0715 static bool is_system_glock(struct gfs2_glock *gl)
0716 {
0717 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
0718 struct gfs2_inode *m_ip = GFS2_I(sdp->sd_statfs_inode);
0719
0720 if (gl == m_ip->i_gl)
0721 return true;
0722 return false;
0723 }
0724
0725
0726
0727
0728
0729
0730
0731
0732
0733 static void do_xmote(struct gfs2_glock *gl, struct gfs2_holder *gh, unsigned int target)
0734 __releases(&gl->gl_lockref.lock)
0735 __acquires(&gl->gl_lockref.lock)
0736 {
0737 const struct gfs2_glock_operations *glops = gl->gl_ops;
0738 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
0739 unsigned int lck_flags = (unsigned int)(gh ? gh->gh_flags : 0);
0740 int ret;
0741
0742 if (target != LM_ST_UNLOCKED && glock_blocked_by_withdraw(gl) &&
0743 gh && !(gh->gh_flags & LM_FLAG_NOEXP))
0744 return;
0745 lck_flags &= (LM_FLAG_TRY | LM_FLAG_TRY_1CB | LM_FLAG_NOEXP |
0746 LM_FLAG_PRIORITY);
0747 GLOCK_BUG_ON(gl, gl->gl_state == target);
0748 GLOCK_BUG_ON(gl, gl->gl_state == gl->gl_target);
0749 if ((target == LM_ST_UNLOCKED || target == LM_ST_DEFERRED) &&
0750 glops->go_inval) {
0751
0752
0753
0754
0755
0756 if (test_and_set_bit(GLF_INVALIDATE_IN_PROGRESS,
0757 &gl->gl_flags))
0758 return;
0759 do_error(gl, 0);
0760 }
0761 gl->gl_req = target;
0762 set_bit(GLF_BLOCKING, &gl->gl_flags);
0763 if ((gl->gl_req == LM_ST_UNLOCKED) ||
0764 (gl->gl_state == LM_ST_EXCLUSIVE) ||
0765 (lck_flags & (LM_FLAG_TRY|LM_FLAG_TRY_1CB)))
0766 clear_bit(GLF_BLOCKING, &gl->gl_flags);
0767 spin_unlock(&gl->gl_lockref.lock);
0768 if (glops->go_sync) {
0769 ret = glops->go_sync(gl);
0770
0771
0772
0773
0774 if (ret) {
0775 if (cmpxchg(&sdp->sd_log_error, 0, ret)) {
0776 fs_err(sdp, "Error %d syncing glock \n", ret);
0777 gfs2_dump_glock(NULL, gl, true);
0778 }
0779 goto skip_inval;
0780 }
0781 }
0782 if (test_bit(GLF_INVALIDATE_IN_PROGRESS, &gl->gl_flags)) {
0783
0784
0785
0786
0787
0788
0789
0790 if ((atomic_read(&gl->gl_ail_count) != 0) &&
0791 (!cmpxchg(&sdp->sd_log_error, 0, -EIO))) {
0792 gfs2_glock_assert_warn(gl,
0793 !atomic_read(&gl->gl_ail_count));
0794 gfs2_dump_glock(NULL, gl, true);
0795 }
0796 glops->go_inval(gl, target == LM_ST_DEFERRED ? 0 : DIO_METADATA);
0797 clear_bit(GLF_INVALIDATE_IN_PROGRESS, &gl->gl_flags);
0798 }
0799
0800 skip_inval:
0801 gfs2_glock_hold(gl);
0802
0803
0804
0805
0806
0807
0808
0809
0810
0811
0812
0813
0814
0815
0816
0817
0818
0819
0820
0821
0822
0823 if (unlikely(sdp->sd_log_error && !gfs2_withdrawn(sdp)))
0824 gfs2_withdraw_delayed(sdp);
0825 if (glock_blocked_by_withdraw(gl) &&
0826 (target != LM_ST_UNLOCKED ||
0827 test_bit(SDF_WITHDRAW_RECOVERY, &sdp->sd_flags))) {
0828 if (!is_system_glock(gl)) {
0829 gfs2_glock_queue_work(gl, GL_GLOCK_DFT_HOLD);
0830 goto out;
0831 } else {
0832 clear_bit(GLF_INVALIDATE_IN_PROGRESS, &gl->gl_flags);
0833 }
0834 }
0835
0836 if (sdp->sd_lockstruct.ls_ops->lm_lock) {
0837
0838 ret = sdp->sd_lockstruct.ls_ops->lm_lock(gl, target, lck_flags);
0839 if (ret == -EINVAL && gl->gl_target == LM_ST_UNLOCKED &&
0840 target == LM_ST_UNLOCKED &&
0841 test_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags)) {
0842 finish_xmote(gl, target);
0843 gfs2_glock_queue_work(gl, 0);
0844 } else if (ret) {
0845 fs_err(sdp, "lm_lock ret %d\n", ret);
0846 GLOCK_BUG_ON(gl, !gfs2_withdrawn(sdp));
0847 }
0848 } else {
0849 finish_xmote(gl, target);
0850 gfs2_glock_queue_work(gl, 0);
0851 }
0852 out:
0853 spin_lock(&gl->gl_lockref.lock);
0854 }
0855
0856
0857
0858
0859
0860
0861
0862
0863 static void run_queue(struct gfs2_glock *gl, const int nonblock)
0864 __releases(&gl->gl_lockref.lock)
0865 __acquires(&gl->gl_lockref.lock)
0866 {
0867 struct gfs2_holder *gh = NULL;
0868
0869 if (test_and_set_bit(GLF_LOCK, &gl->gl_flags))
0870 return;
0871
0872 GLOCK_BUG_ON(gl, test_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags));
0873
0874 if (test_bit(GLF_DEMOTE, &gl->gl_flags) &&
0875 gl->gl_demote_state != gl->gl_state) {
0876 if (find_first_holder(gl))
0877 goto out_unlock;
0878 if (nonblock)
0879 goto out_sched;
0880 set_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags);
0881 GLOCK_BUG_ON(gl, gl->gl_demote_state == LM_ST_EXCLUSIVE);
0882 gl->gl_target = gl->gl_demote_state;
0883 } else {
0884 if (test_bit(GLF_DEMOTE, &gl->gl_flags))
0885 gfs2_demote_wake(gl);
0886 if (do_promote(gl) == 0)
0887 goto out_unlock;
0888 gh = find_first_waiter(gl);
0889 gl->gl_target = gh->gh_state;
0890 if (!(gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB)))
0891 do_error(gl, 0);
0892 }
0893 do_xmote(gl, gh, gl->gl_target);
0894 return;
0895
0896 out_sched:
0897 clear_bit(GLF_LOCK, &gl->gl_flags);
0898 smp_mb__after_atomic();
0899 gl->gl_lockref.count++;
0900 __gfs2_glock_queue_work(gl, 0);
0901 return;
0902
0903 out_unlock:
0904 clear_bit(GLF_LOCK, &gl->gl_flags);
0905 smp_mb__after_atomic();
0906 return;
0907 }
0908
0909 void gfs2_inode_remember_delete(struct gfs2_glock *gl, u64 generation)
0910 {
0911 struct gfs2_inode_lvb *ri = (void *)gl->gl_lksb.sb_lvbptr;
0912
0913 if (ri->ri_magic == 0)
0914 ri->ri_magic = cpu_to_be32(GFS2_MAGIC);
0915 if (ri->ri_magic == cpu_to_be32(GFS2_MAGIC))
0916 ri->ri_generation_deleted = cpu_to_be64(generation);
0917 }
0918
0919 bool gfs2_inode_already_deleted(struct gfs2_glock *gl, u64 generation)
0920 {
0921 struct gfs2_inode_lvb *ri = (void *)gl->gl_lksb.sb_lvbptr;
0922
0923 if (ri->ri_magic != cpu_to_be32(GFS2_MAGIC))
0924 return false;
0925 return generation <= be64_to_cpu(ri->ri_generation_deleted);
0926 }
0927
0928 static void gfs2_glock_poke(struct gfs2_glock *gl)
0929 {
0930 int flags = LM_FLAG_TRY_1CB | LM_FLAG_ANY | GL_SKIP;
0931 struct gfs2_holder gh;
0932 int error;
0933
0934 __gfs2_holder_init(gl, LM_ST_SHARED, flags, &gh, _RET_IP_);
0935 error = gfs2_glock_nq(&gh);
0936 if (!error)
0937 gfs2_glock_dq(&gh);
0938 gfs2_holder_uninit(&gh);
0939 }
0940
0941 static bool gfs2_try_evict(struct gfs2_glock *gl)
0942 {
0943 struct gfs2_inode *ip;
0944 bool evicted = false;
0945
0946
0947
0948
0949
0950
0951
0952
0953
0954
0955
0956 spin_lock(&gl->gl_lockref.lock);
0957 ip = gl->gl_object;
0958 if (ip && !igrab(&ip->i_inode))
0959 ip = NULL;
0960 spin_unlock(&gl->gl_lockref.lock);
0961 if (ip) {
0962 struct gfs2_glock *inode_gl = NULL;
0963
0964 gl->gl_no_formal_ino = ip->i_no_formal_ino;
0965 set_bit(GIF_DEFERRED_DELETE, &ip->i_flags);
0966 d_prune_aliases(&ip->i_inode);
0967 iput(&ip->i_inode);
0968
0969
0970 spin_lock(&gl->gl_lockref.lock);
0971 ip = gl->gl_object;
0972 if (ip) {
0973 inode_gl = ip->i_gl;
0974 lockref_get(&inode_gl->gl_lockref);
0975 clear_bit(GIF_DEFERRED_DELETE, &ip->i_flags);
0976 }
0977 spin_unlock(&gl->gl_lockref.lock);
0978 if (inode_gl) {
0979 gfs2_glock_poke(inode_gl);
0980 gfs2_glock_put(inode_gl);
0981 }
0982 evicted = !ip;
0983 }
0984 return evicted;
0985 }
0986
0987 static void delete_work_func(struct work_struct *work)
0988 {
0989 struct delayed_work *dwork = to_delayed_work(work);
0990 struct gfs2_glock *gl = container_of(dwork, struct gfs2_glock, gl_delete);
0991 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
0992 struct inode *inode;
0993 u64 no_addr = gl->gl_name.ln_number;
0994
0995 spin_lock(&gl->gl_lockref.lock);
0996 clear_bit(GLF_PENDING_DELETE, &gl->gl_flags);
0997 spin_unlock(&gl->gl_lockref.lock);
0998
0999 if (test_bit(GLF_DEMOTE, &gl->gl_flags)) {
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017 if (gfs2_try_evict(gl)) {
1018 if (gfs2_queue_delete_work(gl, 5 * HZ))
1019 return;
1020 }
1021 goto out;
1022 }
1023
1024 inode = gfs2_lookup_by_inum(sdp, no_addr, gl->gl_no_formal_ino,
1025 GFS2_BLKST_UNLINKED);
1026 if (!IS_ERR_OR_NULL(inode)) {
1027 d_prune_aliases(inode);
1028 iput(inode);
1029 }
1030 out:
1031 gfs2_glock_put(gl);
1032 }
1033
1034 static void glock_work_func(struct work_struct *work)
1035 {
1036 unsigned long delay = 0;
1037 struct gfs2_glock *gl = container_of(work, struct gfs2_glock, gl_work.work);
1038 unsigned int drop_refs = 1;
1039
1040 if (test_and_clear_bit(GLF_REPLY_PENDING, &gl->gl_flags)) {
1041 finish_xmote(gl, gl->gl_reply);
1042 drop_refs++;
1043 }
1044 spin_lock(&gl->gl_lockref.lock);
1045 if (test_bit(GLF_PENDING_DEMOTE, &gl->gl_flags) &&
1046 gl->gl_state != LM_ST_UNLOCKED &&
1047 gl->gl_demote_state != LM_ST_EXCLUSIVE) {
1048 unsigned long holdtime, now = jiffies;
1049
1050 holdtime = gl->gl_tchange + gl->gl_hold_time;
1051 if (time_before(now, holdtime))
1052 delay = holdtime - now;
1053
1054 if (!delay) {
1055 clear_bit(GLF_PENDING_DEMOTE, &gl->gl_flags);
1056 gfs2_set_demote(gl);
1057 }
1058 }
1059 run_queue(gl, 0);
1060 if (delay) {
1061
1062 drop_refs--;
1063 if (gl->gl_name.ln_type != LM_TYPE_INODE)
1064 delay = 0;
1065 __gfs2_glock_queue_work(gl, delay);
1066 }
1067
1068
1069
1070
1071
1072
1073 gl->gl_lockref.count -= drop_refs;
1074 if (!gl->gl_lockref.count) {
1075 __gfs2_glock_put(gl);
1076 return;
1077 }
1078 spin_unlock(&gl->gl_lockref.lock);
1079 }
1080
1081 static struct gfs2_glock *find_insert_glock(struct lm_lockname *name,
1082 struct gfs2_glock *new)
1083 {
1084 struct wait_glock_queue wait;
1085 wait_queue_head_t *wq = glock_waitqueue(name);
1086 struct gfs2_glock *gl;
1087
1088 wait.name = name;
1089 init_wait(&wait.wait);
1090 wait.wait.func = glock_wake_function;
1091
1092 again:
1093 prepare_to_wait(wq, &wait.wait, TASK_UNINTERRUPTIBLE);
1094 rcu_read_lock();
1095 if (new) {
1096 gl = rhashtable_lookup_get_insert_fast(&gl_hash_table,
1097 &new->gl_node, ht_parms);
1098 if (IS_ERR(gl))
1099 goto out;
1100 } else {
1101 gl = rhashtable_lookup_fast(&gl_hash_table,
1102 name, ht_parms);
1103 }
1104 if (gl && !lockref_get_not_dead(&gl->gl_lockref)) {
1105 rcu_read_unlock();
1106 schedule();
1107 goto again;
1108 }
1109 out:
1110 rcu_read_unlock();
1111 finish_wait(wq, &wait.wait);
1112 return gl;
1113 }
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128 int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
1129 const struct gfs2_glock_operations *glops, int create,
1130 struct gfs2_glock **glp)
1131 {
1132 struct super_block *s = sdp->sd_vfs;
1133 struct lm_lockname name = { .ln_number = number,
1134 .ln_type = glops->go_type,
1135 .ln_sbd = sdp };
1136 struct gfs2_glock *gl, *tmp;
1137 struct address_space *mapping;
1138 int ret = 0;
1139
1140 gl = find_insert_glock(&name, NULL);
1141 if (gl) {
1142 *glp = gl;
1143 return 0;
1144 }
1145 if (!create)
1146 return -ENOENT;
1147
1148 if (glops->go_flags & GLOF_ASPACE) {
1149 struct gfs2_glock_aspace *gla =
1150 kmem_cache_alloc(gfs2_glock_aspace_cachep, GFP_NOFS);
1151 if (!gla)
1152 return -ENOMEM;
1153 gl = &gla->glock;
1154 } else {
1155 gl = kmem_cache_alloc(gfs2_glock_cachep, GFP_NOFS);
1156 if (!gl)
1157 return -ENOMEM;
1158 }
1159 memset(&gl->gl_lksb, 0, sizeof(struct dlm_lksb));
1160 gl->gl_ops = glops;
1161
1162 if (glops->go_flags & GLOF_LVB) {
1163 gl->gl_lksb.sb_lvbptr = kzalloc(GDLM_LVB_SIZE, GFP_NOFS);
1164 if (!gl->gl_lksb.sb_lvbptr) {
1165 gfs2_glock_dealloc(&gl->gl_rcu);
1166 return -ENOMEM;
1167 }
1168 }
1169
1170 atomic_inc(&sdp->sd_glock_disposal);
1171 gl->gl_node.next = NULL;
1172 gl->gl_flags = glops->go_instantiate ? BIT(GLF_INSTANTIATE_NEEDED) : 0;
1173 gl->gl_name = name;
1174 lockdep_set_subclass(&gl->gl_lockref.lock, glops->go_subclass);
1175 gl->gl_lockref.count = 1;
1176 gl->gl_state = LM_ST_UNLOCKED;
1177 gl->gl_target = LM_ST_UNLOCKED;
1178 gl->gl_demote_state = LM_ST_EXCLUSIVE;
1179 gl->gl_dstamp = 0;
1180 preempt_disable();
1181
1182 gl->gl_stats = this_cpu_ptr(sdp->sd_lkstats)->lkstats[glops->go_type];
1183 preempt_enable();
1184 gl->gl_stats.stats[GFS2_LKS_DCOUNT] = 0;
1185 gl->gl_stats.stats[GFS2_LKS_QCOUNT] = 0;
1186 gl->gl_tchange = jiffies;
1187 gl->gl_object = NULL;
1188 gl->gl_hold_time = GL_GLOCK_DFT_HOLD;
1189 INIT_DELAYED_WORK(&gl->gl_work, glock_work_func);
1190 if (gl->gl_name.ln_type == LM_TYPE_IOPEN)
1191 INIT_DELAYED_WORK(&gl->gl_delete, delete_work_func);
1192
1193 mapping = gfs2_glock2aspace(gl);
1194 if (mapping) {
1195 mapping->a_ops = &gfs2_meta_aops;
1196 mapping->host = s->s_bdev->bd_inode;
1197 mapping->flags = 0;
1198 mapping_set_gfp_mask(mapping, GFP_NOFS);
1199 mapping->private_data = NULL;
1200 mapping->writeback_index = 0;
1201 }
1202
1203 tmp = find_insert_glock(&name, gl);
1204 if (!tmp) {
1205 *glp = gl;
1206 goto out;
1207 }
1208 if (IS_ERR(tmp)) {
1209 ret = PTR_ERR(tmp);
1210 goto out_free;
1211 }
1212 *glp = tmp;
1213
1214 out_free:
1215 gfs2_glock_dealloc(&gl->gl_rcu);
1216 if (atomic_dec_and_test(&sdp->sd_glock_disposal))
1217 wake_up(&sdp->sd_glock_wait);
1218
1219 out:
1220 return ret;
1221 }
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232 void __gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, u16 flags,
1233 struct gfs2_holder *gh, unsigned long ip)
1234 {
1235 INIT_LIST_HEAD(&gh->gh_list);
1236 gh->gh_gl = gl;
1237 gh->gh_ip = ip;
1238 gh->gh_owner_pid = get_pid(task_pid(current));
1239 gh->gh_state = state;
1240 gh->gh_flags = flags;
1241 gh->gh_iflags = 0;
1242 gfs2_glock_hold(gl);
1243 }
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255 void gfs2_holder_reinit(unsigned int state, u16 flags, struct gfs2_holder *gh)
1256 {
1257 gh->gh_state = state;
1258 gh->gh_flags = flags;
1259 gh->gh_iflags = 0;
1260 gh->gh_ip = _RET_IP_;
1261 put_pid(gh->gh_owner_pid);
1262 gh->gh_owner_pid = get_pid(task_pid(current));
1263 }
1264
1265
1266
1267
1268
1269
1270
1271 void gfs2_holder_uninit(struct gfs2_holder *gh)
1272 {
1273 put_pid(gh->gh_owner_pid);
1274 gfs2_glock_put(gh->gh_gl);
1275 gfs2_holder_mark_uninitialized(gh);
1276 gh->gh_ip = 0;
1277 }
1278
1279 static void gfs2_glock_update_hold_time(struct gfs2_glock *gl,
1280 unsigned long start_time)
1281 {
1282
1283 if (time_after(jiffies, start_time + HZ)) {
1284
1285 gl->gl_hold_time = min(gl->gl_hold_time + GL_GLOCK_HOLD_INCR,
1286 GL_GLOCK_MAX_HOLD);
1287 }
1288 }
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299 int gfs2_glock_holder_ready(struct gfs2_holder *gh)
1300 {
1301 if (gh->gh_error || (gh->gh_flags & GL_SKIP))
1302 return gh->gh_error;
1303 gh->gh_error = gfs2_instantiate(gh);
1304 if (gh->gh_error)
1305 gfs2_glock_dq(gh);
1306 return gh->gh_error;
1307 }
1308
1309
1310
1311
1312
1313
1314
1315
1316 int gfs2_glock_wait(struct gfs2_holder *gh)
1317 {
1318 unsigned long start_time = jiffies;
1319
1320 might_sleep();
1321 wait_on_bit(&gh->gh_iflags, HIF_WAIT, TASK_UNINTERRUPTIBLE);
1322 gfs2_glock_update_hold_time(gh->gh_gl, start_time);
1323 return gfs2_glock_holder_ready(gh);
1324 }
1325
1326 static int glocks_pending(unsigned int num_gh, struct gfs2_holder *ghs)
1327 {
1328 int i;
1329
1330 for (i = 0; i < num_gh; i++)
1331 if (test_bit(HIF_WAIT, &ghs[i].gh_iflags))
1332 return 1;
1333 return 0;
1334 }
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346 int gfs2_glock_async_wait(unsigned int num_gh, struct gfs2_holder *ghs)
1347 {
1348 struct gfs2_sbd *sdp = ghs[0].gh_gl->gl_name.ln_sbd;
1349 int i, ret = 0, timeout = 0;
1350 unsigned long start_time = jiffies;
1351
1352 might_sleep();
1353
1354
1355
1356
1357 for (i = 0; i < num_gh; i++)
1358 timeout += ghs[i].gh_gl->gl_hold_time << 1;
1359
1360 if (!wait_event_timeout(sdp->sd_async_glock_wait,
1361 !glocks_pending(num_gh, ghs), timeout)) {
1362 ret = -ESTALE;
1363 goto out;
1364 }
1365
1366 for (i = 0; i < num_gh; i++) {
1367 struct gfs2_holder *gh = &ghs[i];
1368 int ret2;
1369
1370 if (test_bit(HIF_HOLDER, &gh->gh_iflags)) {
1371 gfs2_glock_update_hold_time(gh->gh_gl,
1372 start_time);
1373 }
1374 ret2 = gfs2_glock_holder_ready(gh);
1375 if (!ret)
1376 ret = ret2;
1377 }
1378
1379 out:
1380 if (ret) {
1381 for (i = 0; i < num_gh; i++) {
1382 struct gfs2_holder *gh = &ghs[i];
1383
1384 gfs2_glock_dq(gh);
1385 }
1386 }
1387 return ret;
1388 }
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401 static void handle_callback(struct gfs2_glock *gl, unsigned int state,
1402 unsigned long delay, bool remote)
1403 {
1404 if (delay)
1405 set_bit(GLF_PENDING_DEMOTE, &gl->gl_flags);
1406 else
1407 gfs2_set_demote(gl);
1408 if (gl->gl_demote_state == LM_ST_EXCLUSIVE) {
1409 gl->gl_demote_state = state;
1410 gl->gl_demote_time = jiffies;
1411 } else if (gl->gl_demote_state != LM_ST_UNLOCKED &&
1412 gl->gl_demote_state != state) {
1413 gl->gl_demote_state = LM_ST_UNLOCKED;
1414 }
1415 if (gl->gl_ops->go_callback)
1416 gl->gl_ops->go_callback(gl, remote);
1417 trace_gfs2_demote_rq(gl, remote);
1418 }
1419
1420 void gfs2_print_dbg(struct seq_file *seq, const char *fmt, ...)
1421 {
1422 struct va_format vaf;
1423 va_list args;
1424
1425 va_start(args, fmt);
1426
1427 if (seq) {
1428 seq_vprintf(seq, fmt, args);
1429 } else {
1430 vaf.fmt = fmt;
1431 vaf.va = &args;
1432
1433 pr_err("%pV", &vaf);
1434 }
1435
1436 va_end(args);
1437 }
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449 static inline void add_to_queue(struct gfs2_holder *gh)
1450 __releases(&gl->gl_lockref.lock)
1451 __acquires(&gl->gl_lockref.lock)
1452 {
1453 struct gfs2_glock *gl = gh->gh_gl;
1454 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
1455 struct list_head *insert_pt = NULL;
1456 struct gfs2_holder *gh2;
1457 int try_futile = 0;
1458
1459 GLOCK_BUG_ON(gl, gh->gh_owner_pid == NULL);
1460 if (test_and_set_bit(HIF_WAIT, &gh->gh_iflags))
1461 GLOCK_BUG_ON(gl, true);
1462
1463 if (gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB)) {
1464 if (test_bit(GLF_LOCK, &gl->gl_flags)) {
1465 struct gfs2_holder *current_gh;
1466
1467 current_gh = find_first_strong_holder(gl);
1468 try_futile = !may_grant(gl, current_gh, gh);
1469 }
1470 if (test_bit(GLF_INVALIDATE_IN_PROGRESS, &gl->gl_flags))
1471 goto fail;
1472 }
1473
1474 list_for_each_entry(gh2, &gl->gl_holders, gh_list) {
1475 if (unlikely(gh2->gh_owner_pid == gh->gh_owner_pid &&
1476 (gh->gh_gl->gl_ops->go_type != LM_TYPE_FLOCK) &&
1477 !test_bit(HIF_MAY_DEMOTE, &gh2->gh_iflags)))
1478 goto trap_recursive;
1479 if (try_futile &&
1480 !(gh2->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB))) {
1481 fail:
1482 gh->gh_error = GLR_TRYFAILED;
1483 gfs2_holder_wake(gh);
1484 return;
1485 }
1486 if (test_bit(HIF_HOLDER, &gh2->gh_iflags))
1487 continue;
1488 if (unlikely((gh->gh_flags & LM_FLAG_PRIORITY) && !insert_pt))
1489 insert_pt = &gh2->gh_list;
1490 }
1491 trace_gfs2_glock_queue(gh, 1);
1492 gfs2_glstats_inc(gl, GFS2_LKS_QCOUNT);
1493 gfs2_sbstats_inc(gl, GFS2_LKS_QCOUNT);
1494 if (likely(insert_pt == NULL)) {
1495 list_add_tail(&gh->gh_list, &gl->gl_holders);
1496 if (unlikely(gh->gh_flags & LM_FLAG_PRIORITY))
1497 goto do_cancel;
1498 return;
1499 }
1500 list_add_tail(&gh->gh_list, insert_pt);
1501 do_cancel:
1502 gh = list_first_entry(&gl->gl_holders, struct gfs2_holder, gh_list);
1503 if (!(gh->gh_flags & LM_FLAG_PRIORITY)) {
1504 spin_unlock(&gl->gl_lockref.lock);
1505 if (sdp->sd_lockstruct.ls_ops->lm_cancel)
1506 sdp->sd_lockstruct.ls_ops->lm_cancel(gl);
1507 spin_lock(&gl->gl_lockref.lock);
1508 }
1509 return;
1510
1511 trap_recursive:
1512 fs_err(sdp, "original: %pSR\n", (void *)gh2->gh_ip);
1513 fs_err(sdp, "pid: %d\n", pid_nr(gh2->gh_owner_pid));
1514 fs_err(sdp, "lock type: %d req lock state : %d\n",
1515 gh2->gh_gl->gl_name.ln_type, gh2->gh_state);
1516 fs_err(sdp, "new: %pSR\n", (void *)gh->gh_ip);
1517 fs_err(sdp, "pid: %d\n", pid_nr(gh->gh_owner_pid));
1518 fs_err(sdp, "lock type: %d req lock state : %d\n",
1519 gh->gh_gl->gl_name.ln_type, gh->gh_state);
1520 gfs2_dump_glock(NULL, gl, true);
1521 BUG();
1522 }
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533 int gfs2_glock_nq(struct gfs2_holder *gh)
1534 {
1535 struct gfs2_glock *gl = gh->gh_gl;
1536 int error = 0;
1537
1538 if (glock_blocked_by_withdraw(gl) && !(gh->gh_flags & LM_FLAG_NOEXP))
1539 return -EIO;
1540
1541 if (test_bit(GLF_LRU, &gl->gl_flags))
1542 gfs2_glock_remove_from_lru(gl);
1543
1544 gh->gh_error = 0;
1545 spin_lock(&gl->gl_lockref.lock);
1546 add_to_queue(gh);
1547 if (unlikely((LM_FLAG_NOEXP & gh->gh_flags) &&
1548 test_and_clear_bit(GLF_FROZEN, &gl->gl_flags))) {
1549 set_bit(GLF_REPLY_PENDING, &gl->gl_flags);
1550 gl->gl_lockref.count++;
1551 __gfs2_glock_queue_work(gl, 0);
1552 }
1553 run_queue(gl, 1);
1554 spin_unlock(&gl->gl_lockref.lock);
1555
1556 if (!(gh->gh_flags & GL_ASYNC))
1557 error = gfs2_glock_wait(gh);
1558
1559 return error;
1560 }
1561
1562
1563
1564
1565
1566
1567
1568
1569 int gfs2_glock_poll(struct gfs2_holder *gh)
1570 {
1571 return test_bit(HIF_WAIT, &gh->gh_iflags) ? 0 : 1;
1572 }
1573
1574 static inline bool needs_demote(struct gfs2_glock *gl)
1575 {
1576 return (test_bit(GLF_DEMOTE, &gl->gl_flags) ||
1577 test_bit(GLF_PENDING_DEMOTE, &gl->gl_flags));
1578 }
1579
1580 static void __gfs2_glock_dq(struct gfs2_holder *gh)
1581 {
1582 struct gfs2_glock *gl = gh->gh_gl;
1583 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
1584 unsigned delay = 0;
1585 int fast_path = 0;
1586
1587
1588
1589
1590
1591
1592
1593 while (gh) {
1594
1595
1596
1597
1598
1599
1600
1601 if (test_bit(SDF_WITHDRAW_RECOVERY, &sdp->sd_flags) &&
1602 glock_blocked_by_withdraw(gl) &&
1603 gh->gh_gl != sdp->sd_jinode_gl) {
1604 sdp->sd_glock_dqs_held++;
1605 spin_unlock(&gl->gl_lockref.lock);
1606 might_sleep();
1607 wait_on_bit(&sdp->sd_flags, SDF_WITHDRAW_RECOVERY,
1608 TASK_UNINTERRUPTIBLE);
1609 spin_lock(&gl->gl_lockref.lock);
1610 }
1611
1612
1613
1614
1615
1616
1617 if (gh->gh_flags & GL_NOCACHE)
1618 handle_callback(gl, LM_ST_UNLOCKED, 0, false);
1619
1620 list_del_init(&gh->gh_list);
1621 clear_bit(HIF_HOLDER, &gh->gh_iflags);
1622 trace_gfs2_glock_queue(gh, 0);
1623
1624
1625
1626
1627
1628 if (!needs_demote(gl)) {
1629 if (list_empty(&gl->gl_holders))
1630 fast_path = 1;
1631 break;
1632 }
1633
1634
1635
1636
1637 if (find_first_strong_holder(gl))
1638 break;
1639
1640
1641
1642
1643
1644
1645 gh = find_first_holder(gl);
1646 }
1647
1648 if (!test_bit(GLF_LFLUSH, &gl->gl_flags) && demote_ok(gl))
1649 gfs2_glock_add_to_lru(gl);
1650
1651 if (unlikely(!fast_path)) {
1652 gl->gl_lockref.count++;
1653 if (test_bit(GLF_PENDING_DEMOTE, &gl->gl_flags) &&
1654 !test_bit(GLF_DEMOTE, &gl->gl_flags) &&
1655 gl->gl_name.ln_type == LM_TYPE_INODE)
1656 delay = gl->gl_hold_time;
1657 __gfs2_glock_queue_work(gl, delay);
1658 }
1659 }
1660
1661
1662
1663
1664
1665
1666 void gfs2_glock_dq(struct gfs2_holder *gh)
1667 {
1668 struct gfs2_glock *gl = gh->gh_gl;
1669
1670 spin_lock(&gl->gl_lockref.lock);
1671 if (list_is_first(&gh->gh_list, &gl->gl_holders) &&
1672 !test_bit(HIF_HOLDER, &gh->gh_iflags)) {
1673 spin_unlock(&gl->gl_lockref.lock);
1674 gl->gl_name.ln_sbd->sd_lockstruct.ls_ops->lm_cancel(gl);
1675 wait_on_bit(&gh->gh_iflags, HIF_WAIT, TASK_UNINTERRUPTIBLE);
1676 spin_lock(&gl->gl_lockref.lock);
1677 }
1678
1679 __gfs2_glock_dq(gh);
1680 spin_unlock(&gl->gl_lockref.lock);
1681 }
1682
1683 void gfs2_glock_dq_wait(struct gfs2_holder *gh)
1684 {
1685 struct gfs2_glock *gl = gh->gh_gl;
1686 gfs2_glock_dq(gh);
1687 might_sleep();
1688 wait_on_bit(&gl->gl_flags, GLF_DEMOTE, TASK_UNINTERRUPTIBLE);
1689 }
1690
1691
1692
1693
1694
1695
1696
1697 void gfs2_glock_dq_uninit(struct gfs2_holder *gh)
1698 {
1699 gfs2_glock_dq(gh);
1700 gfs2_holder_uninit(gh);
1701 }
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715 int gfs2_glock_nq_num(struct gfs2_sbd *sdp, u64 number,
1716 const struct gfs2_glock_operations *glops,
1717 unsigned int state, u16 flags, struct gfs2_holder *gh)
1718 {
1719 struct gfs2_glock *gl;
1720 int error;
1721
1722 error = gfs2_glock_get(sdp, number, glops, CREATE, &gl);
1723 if (!error) {
1724 error = gfs2_glock_nq_init(gl, state, flags, gh);
1725 gfs2_glock_put(gl);
1726 }
1727
1728 return error;
1729 }
1730
1731
1732
1733
1734
1735
1736
1737
1738 static int glock_compare(const void *arg_a, const void *arg_b)
1739 {
1740 const struct gfs2_holder *gh_a = *(const struct gfs2_holder **)arg_a;
1741 const struct gfs2_holder *gh_b = *(const struct gfs2_holder **)arg_b;
1742 const struct lm_lockname *a = &gh_a->gh_gl->gl_name;
1743 const struct lm_lockname *b = &gh_b->gh_gl->gl_name;
1744
1745 if (a->ln_number > b->ln_number)
1746 return 1;
1747 if (a->ln_number < b->ln_number)
1748 return -1;
1749 BUG_ON(gh_a->gh_gl->gl_ops->go_type == gh_b->gh_gl->gl_ops->go_type);
1750 return 0;
1751 }
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763 static int nq_m_sync(unsigned int num_gh, struct gfs2_holder *ghs,
1764 struct gfs2_holder **p)
1765 {
1766 unsigned int x;
1767 int error = 0;
1768
1769 for (x = 0; x < num_gh; x++)
1770 p[x] = &ghs[x];
1771
1772 sort(p, num_gh, sizeof(struct gfs2_holder *), glock_compare, NULL);
1773
1774 for (x = 0; x < num_gh; x++) {
1775 error = gfs2_glock_nq(p[x]);
1776 if (error) {
1777 while (x--)
1778 gfs2_glock_dq(p[x]);
1779 break;
1780 }
1781 }
1782
1783 return error;
1784 }
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795 int gfs2_glock_nq_m(unsigned int num_gh, struct gfs2_holder *ghs)
1796 {
1797 struct gfs2_holder *tmp[4];
1798 struct gfs2_holder **pph = tmp;
1799 int error = 0;
1800
1801 switch(num_gh) {
1802 case 0:
1803 return 0;
1804 case 1:
1805 return gfs2_glock_nq(ghs);
1806 default:
1807 if (num_gh <= 4)
1808 break;
1809 pph = kmalloc_array(num_gh, sizeof(struct gfs2_holder *),
1810 GFP_NOFS);
1811 if (!pph)
1812 return -ENOMEM;
1813 }
1814
1815 error = nq_m_sync(num_gh, ghs, pph);
1816
1817 if (pph != tmp)
1818 kfree(pph);
1819
1820 return error;
1821 }
1822
1823
1824
1825
1826
1827
1828
1829
1830 void gfs2_glock_dq_m(unsigned int num_gh, struct gfs2_holder *ghs)
1831 {
1832 while (num_gh--)
1833 gfs2_glock_dq(&ghs[num_gh]);
1834 }
1835
1836 void gfs2_glock_cb(struct gfs2_glock *gl, unsigned int state)
1837 {
1838 unsigned long delay = 0;
1839 unsigned long holdtime;
1840 unsigned long now = jiffies;
1841
1842 gfs2_glock_hold(gl);
1843 spin_lock(&gl->gl_lockref.lock);
1844 holdtime = gl->gl_tchange + gl->gl_hold_time;
1845 if (!list_empty(&gl->gl_holders) &&
1846 gl->gl_name.ln_type == LM_TYPE_INODE) {
1847 if (time_before(now, holdtime))
1848 delay = holdtime - now;
1849 if (test_bit(GLF_REPLY_PENDING, &gl->gl_flags))
1850 delay = gl->gl_hold_time;
1851 }
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869 if (!find_first_strong_holder(gl)) {
1870 struct gfs2_holder mock_gh = {
1871 .gh_gl = gl,
1872 .gh_state = (state == LM_ST_UNLOCKED) ?
1873 LM_ST_EXCLUSIVE : state,
1874 .gh_iflags = BIT(HIF_HOLDER)
1875 };
1876
1877 demote_incompat_holders(gl, &mock_gh);
1878 }
1879 handle_callback(gl, state, delay, true);
1880 __gfs2_glock_queue_work(gl, delay);
1881 spin_unlock(&gl->gl_lockref.lock);
1882 }
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895 static int gfs2_should_freeze(const struct gfs2_glock *gl)
1896 {
1897 const struct gfs2_holder *gh;
1898
1899 if (gl->gl_reply & ~LM_OUT_ST_MASK)
1900 return 0;
1901 if (gl->gl_target == LM_ST_UNLOCKED)
1902 return 0;
1903
1904 list_for_each_entry(gh, &gl->gl_holders, gh_list) {
1905 if (test_bit(HIF_HOLDER, &gh->gh_iflags))
1906 continue;
1907 if (LM_FLAG_NOEXP & gh->gh_flags)
1908 return 0;
1909 }
1910
1911 return 1;
1912 }
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923 void gfs2_glock_complete(struct gfs2_glock *gl, int ret)
1924 {
1925 struct lm_lockstruct *ls = &gl->gl_name.ln_sbd->sd_lockstruct;
1926
1927 spin_lock(&gl->gl_lockref.lock);
1928 gl->gl_reply = ret;
1929
1930 if (unlikely(test_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags))) {
1931 if (gfs2_should_freeze(gl)) {
1932 set_bit(GLF_FROZEN, &gl->gl_flags);
1933 spin_unlock(&gl->gl_lockref.lock);
1934 return;
1935 }
1936 }
1937
1938 gl->gl_lockref.count++;
1939 set_bit(GLF_REPLY_PENDING, &gl->gl_flags);
1940 __gfs2_glock_queue_work(gl, 0);
1941 spin_unlock(&gl->gl_lockref.lock);
1942 }
1943
1944 static int glock_cmp(void *priv, const struct list_head *a,
1945 const struct list_head *b)
1946 {
1947 struct gfs2_glock *gla, *glb;
1948
1949 gla = list_entry(a, struct gfs2_glock, gl_lru);
1950 glb = list_entry(b, struct gfs2_glock, gl_lru);
1951
1952 if (gla->gl_name.ln_number > glb->gl_name.ln_number)
1953 return 1;
1954 if (gla->gl_name.ln_number < glb->gl_name.ln_number)
1955 return -1;
1956
1957 return 0;
1958 }
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974 static void gfs2_dispose_glock_lru(struct list_head *list)
1975 __releases(&lru_lock)
1976 __acquires(&lru_lock)
1977 {
1978 struct gfs2_glock *gl;
1979
1980 list_sort(NULL, list, glock_cmp);
1981
1982 while(!list_empty(list)) {
1983 gl = list_first_entry(list, struct gfs2_glock, gl_lru);
1984 list_del_init(&gl->gl_lru);
1985 clear_bit(GLF_LRU, &gl->gl_flags);
1986 if (!spin_trylock(&gl->gl_lockref.lock)) {
1987 add_back_to_lru:
1988 list_add(&gl->gl_lru, &lru_list);
1989 set_bit(GLF_LRU, &gl->gl_flags);
1990 atomic_inc(&lru_count);
1991 continue;
1992 }
1993 if (test_and_set_bit(GLF_LOCK, &gl->gl_flags)) {
1994 spin_unlock(&gl->gl_lockref.lock);
1995 goto add_back_to_lru;
1996 }
1997 gl->gl_lockref.count++;
1998 if (demote_ok(gl))
1999 handle_callback(gl, LM_ST_UNLOCKED, 0, false);
2000 WARN_ON(!test_and_clear_bit(GLF_LOCK, &gl->gl_flags));
2001 __gfs2_glock_queue_work(gl, 0);
2002 spin_unlock(&gl->gl_lockref.lock);
2003 cond_resched_lock(&lru_lock);
2004 }
2005 }
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016 static long gfs2_scan_glock_lru(int nr)
2017 {
2018 struct gfs2_glock *gl;
2019 LIST_HEAD(skipped);
2020 LIST_HEAD(dispose);
2021 long freed = 0;
2022
2023 spin_lock(&lru_lock);
2024 while ((nr-- >= 0) && !list_empty(&lru_list)) {
2025 gl = list_first_entry(&lru_list, struct gfs2_glock, gl_lru);
2026
2027
2028 if (!test_bit(GLF_LOCK, &gl->gl_flags)) {
2029 list_move(&gl->gl_lru, &dispose);
2030 atomic_dec(&lru_count);
2031 freed++;
2032 continue;
2033 }
2034
2035 list_move(&gl->gl_lru, &skipped);
2036 }
2037 list_splice(&skipped, &lru_list);
2038 if (!list_empty(&dispose))
2039 gfs2_dispose_glock_lru(&dispose);
2040 spin_unlock(&lru_lock);
2041
2042 return freed;
2043 }
2044
2045 static unsigned long gfs2_glock_shrink_scan(struct shrinker *shrink,
2046 struct shrink_control *sc)
2047 {
2048 if (!(sc->gfp_mask & __GFP_FS))
2049 return SHRINK_STOP;
2050 return gfs2_scan_glock_lru(sc->nr_to_scan);
2051 }
2052
2053 static unsigned long gfs2_glock_shrink_count(struct shrinker *shrink,
2054 struct shrink_control *sc)
2055 {
2056 return vfs_pressure_ratio(atomic_read(&lru_count));
2057 }
2058
2059 static struct shrinker glock_shrinker = {
2060 .seeks = DEFAULT_SEEKS,
2061 .count_objects = gfs2_glock_shrink_count,
2062 .scan_objects = gfs2_glock_shrink_scan,
2063 };
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075 static void glock_hash_walk(glock_examiner examiner, const struct gfs2_sbd *sdp)
2076 {
2077 struct gfs2_glock *gl;
2078 struct rhashtable_iter iter;
2079
2080 rhashtable_walk_enter(&gl_hash_table, &iter);
2081
2082 do {
2083 rhashtable_walk_start(&iter);
2084
2085 while ((gl = rhashtable_walk_next(&iter)) && !IS_ERR(gl)) {
2086 if (gl->gl_name.ln_sbd == sdp)
2087 examiner(gl);
2088 }
2089
2090 rhashtable_walk_stop(&iter);
2091 } while (cond_resched(), gl == ERR_PTR(-EAGAIN));
2092
2093 rhashtable_walk_exit(&iter);
2094 }
2095
2096 bool gfs2_queue_delete_work(struct gfs2_glock *gl, unsigned long delay)
2097 {
2098 bool queued;
2099
2100 spin_lock(&gl->gl_lockref.lock);
2101 queued = queue_delayed_work(gfs2_delete_workqueue,
2102 &gl->gl_delete, delay);
2103 if (queued)
2104 set_bit(GLF_PENDING_DELETE, &gl->gl_flags);
2105 spin_unlock(&gl->gl_lockref.lock);
2106 return queued;
2107 }
2108
2109 void gfs2_cancel_delete_work(struct gfs2_glock *gl)
2110 {
2111 if (cancel_delayed_work(&gl->gl_delete)) {
2112 clear_bit(GLF_PENDING_DELETE, &gl->gl_flags);
2113 gfs2_glock_put(gl);
2114 }
2115 }
2116
2117 bool gfs2_delete_work_queued(const struct gfs2_glock *gl)
2118 {
2119 return test_bit(GLF_PENDING_DELETE, &gl->gl_flags);
2120 }
2121
2122 static void flush_delete_work(struct gfs2_glock *gl)
2123 {
2124 if (gl->gl_name.ln_type == LM_TYPE_IOPEN) {
2125 if (cancel_delayed_work(&gl->gl_delete)) {
2126 queue_delayed_work(gfs2_delete_workqueue,
2127 &gl->gl_delete, 0);
2128 }
2129 }
2130 }
2131
2132 void gfs2_flush_delete_work(struct gfs2_sbd *sdp)
2133 {
2134 glock_hash_walk(flush_delete_work, sdp);
2135 flush_workqueue(gfs2_delete_workqueue);
2136 }
2137
2138
2139
2140
2141
2142
2143
2144 static void thaw_glock(struct gfs2_glock *gl)
2145 {
2146 if (!test_and_clear_bit(GLF_FROZEN, &gl->gl_flags))
2147 return;
2148 if (!lockref_get_not_dead(&gl->gl_lockref))
2149 return;
2150 set_bit(GLF_REPLY_PENDING, &gl->gl_flags);
2151 gfs2_glock_queue_work(gl, 0);
2152 }
2153
2154
2155
2156
2157
2158
2159
2160 static void clear_glock(struct gfs2_glock *gl)
2161 {
2162 gfs2_glock_remove_from_lru(gl);
2163
2164 spin_lock(&gl->gl_lockref.lock);
2165 if (!__lockref_is_dead(&gl->gl_lockref)) {
2166 gl->gl_lockref.count++;
2167 if (gl->gl_state != LM_ST_UNLOCKED)
2168 handle_callback(gl, LM_ST_UNLOCKED, 0, false);
2169 __gfs2_glock_queue_work(gl, 0);
2170 }
2171 spin_unlock(&gl->gl_lockref.lock);
2172 }
2173
2174
2175
2176
2177
2178
2179
2180 void gfs2_glock_thaw(struct gfs2_sbd *sdp)
2181 {
2182 glock_hash_walk(thaw_glock, sdp);
2183 }
2184
2185 static void dump_glock(struct seq_file *seq, struct gfs2_glock *gl, bool fsid)
2186 {
2187 spin_lock(&gl->gl_lockref.lock);
2188 gfs2_dump_glock(seq, gl, fsid);
2189 spin_unlock(&gl->gl_lockref.lock);
2190 }
2191
2192 static void dump_glock_func(struct gfs2_glock *gl)
2193 {
2194 dump_glock(NULL, gl, true);
2195 }
2196
2197
2198
2199
2200
2201
2202
2203
2204 void gfs2_gl_hash_clear(struct gfs2_sbd *sdp)
2205 {
2206 set_bit(SDF_SKIP_DLM_UNLOCK, &sdp->sd_flags);
2207 flush_workqueue(glock_workqueue);
2208 glock_hash_walk(clear_glock, sdp);
2209 flush_workqueue(glock_workqueue);
2210 wait_event_timeout(sdp->sd_glock_wait,
2211 atomic_read(&sdp->sd_glock_disposal) == 0,
2212 HZ * 600);
2213 glock_hash_walk(dump_glock_func, sdp);
2214 }
2215
2216 static const char *state2str(unsigned state)
2217 {
2218 switch(state) {
2219 case LM_ST_UNLOCKED:
2220 return "UN";
2221 case LM_ST_SHARED:
2222 return "SH";
2223 case LM_ST_DEFERRED:
2224 return "DF";
2225 case LM_ST_EXCLUSIVE:
2226 return "EX";
2227 }
2228 return "??";
2229 }
2230
2231 static const char *hflags2str(char *buf, u16 flags, unsigned long iflags)
2232 {
2233 char *p = buf;
2234 if (flags & LM_FLAG_TRY)
2235 *p++ = 't';
2236 if (flags & LM_FLAG_TRY_1CB)
2237 *p++ = 'T';
2238 if (flags & LM_FLAG_NOEXP)
2239 *p++ = 'e';
2240 if (flags & LM_FLAG_ANY)
2241 *p++ = 'A';
2242 if (flags & LM_FLAG_PRIORITY)
2243 *p++ = 'p';
2244 if (flags & LM_FLAG_NODE_SCOPE)
2245 *p++ = 'n';
2246 if (flags & GL_ASYNC)
2247 *p++ = 'a';
2248 if (flags & GL_EXACT)
2249 *p++ = 'E';
2250 if (flags & GL_NOCACHE)
2251 *p++ = 'c';
2252 if (test_bit(HIF_HOLDER, &iflags))
2253 *p++ = 'H';
2254 if (test_bit(HIF_WAIT, &iflags))
2255 *p++ = 'W';
2256 if (test_bit(HIF_MAY_DEMOTE, &iflags))
2257 *p++ = 'D';
2258 if (flags & GL_SKIP)
2259 *p++ = 's';
2260 *p = 0;
2261 return buf;
2262 }
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272 static void dump_holder(struct seq_file *seq, const struct gfs2_holder *gh,
2273 const char *fs_id_buf)
2274 {
2275 struct task_struct *gh_owner = NULL;
2276 char flags_buf[32];
2277
2278 rcu_read_lock();
2279 if (gh->gh_owner_pid)
2280 gh_owner = pid_task(gh->gh_owner_pid, PIDTYPE_PID);
2281 gfs2_print_dbg(seq, "%s H: s:%s f:%s e:%d p:%ld [%s] %pS\n",
2282 fs_id_buf, state2str(gh->gh_state),
2283 hflags2str(flags_buf, gh->gh_flags, gh->gh_iflags),
2284 gh->gh_error,
2285 gh->gh_owner_pid ? (long)pid_nr(gh->gh_owner_pid) : -1,
2286 gh_owner ? gh_owner->comm : "(ended)",
2287 (void *)gh->gh_ip);
2288 rcu_read_unlock();
2289 }
2290
2291 static const char *gflags2str(char *buf, const struct gfs2_glock *gl)
2292 {
2293 const unsigned long *gflags = &gl->gl_flags;
2294 char *p = buf;
2295
2296 if (test_bit(GLF_LOCK, gflags))
2297 *p++ = 'l';
2298 if (test_bit(GLF_DEMOTE, gflags))
2299 *p++ = 'D';
2300 if (test_bit(GLF_PENDING_DEMOTE, gflags))
2301 *p++ = 'd';
2302 if (test_bit(GLF_DEMOTE_IN_PROGRESS, gflags))
2303 *p++ = 'p';
2304 if (test_bit(GLF_DIRTY, gflags))
2305 *p++ = 'y';
2306 if (test_bit(GLF_LFLUSH, gflags))
2307 *p++ = 'f';
2308 if (test_bit(GLF_INVALIDATE_IN_PROGRESS, gflags))
2309 *p++ = 'i';
2310 if (test_bit(GLF_REPLY_PENDING, gflags))
2311 *p++ = 'r';
2312 if (test_bit(GLF_INITIAL, gflags))
2313 *p++ = 'I';
2314 if (test_bit(GLF_FROZEN, gflags))
2315 *p++ = 'F';
2316 if (!list_empty(&gl->gl_holders))
2317 *p++ = 'q';
2318 if (test_bit(GLF_LRU, gflags))
2319 *p++ = 'L';
2320 if (gl->gl_object)
2321 *p++ = 'o';
2322 if (test_bit(GLF_BLOCKING, gflags))
2323 *p++ = 'b';
2324 if (test_bit(GLF_PENDING_DELETE, gflags))
2325 *p++ = 'P';
2326 if (test_bit(GLF_FREEING, gflags))
2327 *p++ = 'x';
2328 if (test_bit(GLF_INSTANTIATE_NEEDED, gflags))
2329 *p++ = 'n';
2330 if (test_bit(GLF_INSTANTIATE_IN_PROG, gflags))
2331 *p++ = 'N';
2332 *p = 0;
2333 return buf;
2334 }
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354 void gfs2_dump_glock(struct seq_file *seq, struct gfs2_glock *gl, bool fsid)
2355 {
2356 const struct gfs2_glock_operations *glops = gl->gl_ops;
2357 unsigned long long dtime;
2358 const struct gfs2_holder *gh;
2359 char gflags_buf[32];
2360 struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
2361 char fs_id_buf[sizeof(sdp->sd_fsname) + 7];
2362 unsigned long nrpages = 0;
2363
2364 if (gl->gl_ops->go_flags & GLOF_ASPACE) {
2365 struct address_space *mapping = gfs2_glock2aspace(gl);
2366
2367 nrpages = mapping->nrpages;
2368 }
2369 memset(fs_id_buf, 0, sizeof(fs_id_buf));
2370 if (fsid && sdp)
2371 sprintf(fs_id_buf, "fsid=%s: ", sdp->sd_fsname);
2372 dtime = jiffies - gl->gl_demote_time;
2373 dtime *= 1000000/HZ;
2374 if (!test_bit(GLF_DEMOTE, &gl->gl_flags))
2375 dtime = 0;
2376 gfs2_print_dbg(seq, "%sG: s:%s n:%u/%llx f:%s t:%s d:%s/%llu a:%d "
2377 "v:%d r:%d m:%ld p:%lu\n",
2378 fs_id_buf, state2str(gl->gl_state),
2379 gl->gl_name.ln_type,
2380 (unsigned long long)gl->gl_name.ln_number,
2381 gflags2str(gflags_buf, gl),
2382 state2str(gl->gl_target),
2383 state2str(gl->gl_demote_state), dtime,
2384 atomic_read(&gl->gl_ail_count),
2385 atomic_read(&gl->gl_revokes),
2386 (int)gl->gl_lockref.count, gl->gl_hold_time, nrpages);
2387
2388 list_for_each_entry(gh, &gl->gl_holders, gh_list)
2389 dump_holder(seq, gh, fs_id_buf);
2390
2391 if (gl->gl_state != LM_ST_UNLOCKED && glops->go_dump)
2392 glops->go_dump(seq, gl, fs_id_buf);
2393 }
2394
2395 static int gfs2_glstats_seq_show(struct seq_file *seq, void *iter_ptr)
2396 {
2397 struct gfs2_glock *gl = iter_ptr;
2398
2399 seq_printf(seq, "G: n:%u/%llx rtt:%llu/%llu rttb:%llu/%llu irt:%llu/%llu dcnt: %llu qcnt: %llu\n",
2400 gl->gl_name.ln_type,
2401 (unsigned long long)gl->gl_name.ln_number,
2402 (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SRTT],
2403 (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SRTTVAR],
2404 (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SRTTB],
2405 (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SRTTVARB],
2406 (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SIRT],
2407 (unsigned long long)gl->gl_stats.stats[GFS2_LKS_SIRTVAR],
2408 (unsigned long long)gl->gl_stats.stats[GFS2_LKS_DCOUNT],
2409 (unsigned long long)gl->gl_stats.stats[GFS2_LKS_QCOUNT]);
2410 return 0;
2411 }
2412
2413 static const char *gfs2_gltype[] = {
2414 "type",
2415 "reserved",
2416 "nondisk",
2417 "inode",
2418 "rgrp",
2419 "meta",
2420 "iopen",
2421 "flock",
2422 "plock",
2423 "quota",
2424 "journal",
2425 };
2426
2427 static const char *gfs2_stype[] = {
2428 [GFS2_LKS_SRTT] = "srtt",
2429 [GFS2_LKS_SRTTVAR] = "srttvar",
2430 [GFS2_LKS_SRTTB] = "srttb",
2431 [GFS2_LKS_SRTTVARB] = "srttvarb",
2432 [GFS2_LKS_SIRT] = "sirt",
2433 [GFS2_LKS_SIRTVAR] = "sirtvar",
2434 [GFS2_LKS_DCOUNT] = "dlm",
2435 [GFS2_LKS_QCOUNT] = "queue",
2436 };
2437
2438 #define GFS2_NR_SBSTATS (ARRAY_SIZE(gfs2_gltype) * ARRAY_SIZE(gfs2_stype))
2439
2440 static int gfs2_sbstats_seq_show(struct seq_file *seq, void *iter_ptr)
2441 {
2442 struct gfs2_sbd *sdp = seq->private;
2443 loff_t pos = *(loff_t *)iter_ptr;
2444 unsigned index = pos >> 3;
2445 unsigned subindex = pos & 0x07;
2446 int i;
2447
2448 if (index == 0 && subindex != 0)
2449 return 0;
2450
2451 seq_printf(seq, "%-10s %8s:", gfs2_gltype[index],
2452 (index == 0) ? "cpu": gfs2_stype[subindex]);
2453
2454 for_each_possible_cpu(i) {
2455 const struct gfs2_pcpu_lkstats *lkstats = per_cpu_ptr(sdp->sd_lkstats, i);
2456
2457 if (index == 0)
2458 seq_printf(seq, " %15u", i);
2459 else
2460 seq_printf(seq, " %15llu", (unsigned long long)lkstats->
2461 lkstats[index - 1].stats[subindex]);
2462 }
2463 seq_putc(seq, '\n');
2464 return 0;
2465 }
2466
2467 int __init gfs2_glock_init(void)
2468 {
2469 int i, ret;
2470
2471 ret = rhashtable_init(&gl_hash_table, &ht_parms);
2472 if (ret < 0)
2473 return ret;
2474
2475 glock_workqueue = alloc_workqueue("glock_workqueue", WQ_MEM_RECLAIM |
2476 WQ_HIGHPRI | WQ_FREEZABLE, 0);
2477 if (!glock_workqueue) {
2478 rhashtable_destroy(&gl_hash_table);
2479 return -ENOMEM;
2480 }
2481 gfs2_delete_workqueue = alloc_workqueue("delete_workqueue",
2482 WQ_MEM_RECLAIM | WQ_FREEZABLE,
2483 0);
2484 if (!gfs2_delete_workqueue) {
2485 destroy_workqueue(glock_workqueue);
2486 rhashtable_destroy(&gl_hash_table);
2487 return -ENOMEM;
2488 }
2489
2490 ret = register_shrinker(&glock_shrinker, "gfs2-glock");
2491 if (ret) {
2492 destroy_workqueue(gfs2_delete_workqueue);
2493 destroy_workqueue(glock_workqueue);
2494 rhashtable_destroy(&gl_hash_table);
2495 return ret;
2496 }
2497
2498 for (i = 0; i < GLOCK_WAIT_TABLE_SIZE; i++)
2499 init_waitqueue_head(glock_wait_table + i);
2500
2501 return 0;
2502 }
2503
2504 void gfs2_glock_exit(void)
2505 {
2506 unregister_shrinker(&glock_shrinker);
2507 rhashtable_destroy(&gl_hash_table);
2508 destroy_workqueue(glock_workqueue);
2509 destroy_workqueue(gfs2_delete_workqueue);
2510 }
2511
2512 static void gfs2_glock_iter_next(struct gfs2_glock_iter *gi, loff_t n)
2513 {
2514 struct gfs2_glock *gl = gi->gl;
2515
2516 if (gl) {
2517 if (n == 0)
2518 return;
2519 if (!lockref_put_not_zero(&gl->gl_lockref))
2520 gfs2_glock_queue_put(gl);
2521 }
2522 for (;;) {
2523 gl = rhashtable_walk_next(&gi->hti);
2524 if (IS_ERR_OR_NULL(gl)) {
2525 if (gl == ERR_PTR(-EAGAIN)) {
2526 n = 1;
2527 continue;
2528 }
2529 gl = NULL;
2530 break;
2531 }
2532 if (gl->gl_name.ln_sbd != gi->sdp)
2533 continue;
2534 if (n <= 1) {
2535 if (!lockref_get_not_dead(&gl->gl_lockref))
2536 continue;
2537 break;
2538 } else {
2539 if (__lockref_is_dead(&gl->gl_lockref))
2540 continue;
2541 n--;
2542 }
2543 }
2544 gi->gl = gl;
2545 }
2546
2547 static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos)
2548 __acquires(RCU)
2549 {
2550 struct gfs2_glock_iter *gi = seq->private;
2551 loff_t n;
2552
2553
2554
2555
2556
2557 if (*pos < gi->last_pos) {
2558 rhashtable_walk_exit(&gi->hti);
2559 rhashtable_walk_enter(&gl_hash_table, &gi->hti);
2560 n = *pos + 1;
2561 } else {
2562 n = *pos - gi->last_pos;
2563 }
2564
2565 rhashtable_walk_start(&gi->hti);
2566
2567 gfs2_glock_iter_next(gi, n);
2568 gi->last_pos = *pos;
2569 return gi->gl;
2570 }
2571
2572 static void *gfs2_glock_seq_next(struct seq_file *seq, void *iter_ptr,
2573 loff_t *pos)
2574 {
2575 struct gfs2_glock_iter *gi = seq->private;
2576
2577 (*pos)++;
2578 gi->last_pos = *pos;
2579 gfs2_glock_iter_next(gi, 1);
2580 return gi->gl;
2581 }
2582
2583 static void gfs2_glock_seq_stop(struct seq_file *seq, void *iter_ptr)
2584 __releases(RCU)
2585 {
2586 struct gfs2_glock_iter *gi = seq->private;
2587
2588 rhashtable_walk_stop(&gi->hti);
2589 }
2590
2591 static int gfs2_glock_seq_show(struct seq_file *seq, void *iter_ptr)
2592 {
2593 dump_glock(seq, iter_ptr, false);
2594 return 0;
2595 }
2596
2597 static void *gfs2_sbstats_seq_start(struct seq_file *seq, loff_t *pos)
2598 {
2599 preempt_disable();
2600 if (*pos >= GFS2_NR_SBSTATS)
2601 return NULL;
2602 return pos;
2603 }
2604
2605 static void *gfs2_sbstats_seq_next(struct seq_file *seq, void *iter_ptr,
2606 loff_t *pos)
2607 {
2608 (*pos)++;
2609 if (*pos >= GFS2_NR_SBSTATS)
2610 return NULL;
2611 return pos;
2612 }
2613
2614 static void gfs2_sbstats_seq_stop(struct seq_file *seq, void *iter_ptr)
2615 {
2616 preempt_enable();
2617 }
2618
2619 static const struct seq_operations gfs2_glock_seq_ops = {
2620 .start = gfs2_glock_seq_start,
2621 .next = gfs2_glock_seq_next,
2622 .stop = gfs2_glock_seq_stop,
2623 .show = gfs2_glock_seq_show,
2624 };
2625
2626 static const struct seq_operations gfs2_glstats_seq_ops = {
2627 .start = gfs2_glock_seq_start,
2628 .next = gfs2_glock_seq_next,
2629 .stop = gfs2_glock_seq_stop,
2630 .show = gfs2_glstats_seq_show,
2631 };
2632
2633 static const struct seq_operations gfs2_sbstats_sops = {
2634 .start = gfs2_sbstats_seq_start,
2635 .next = gfs2_sbstats_seq_next,
2636 .stop = gfs2_sbstats_seq_stop,
2637 .show = gfs2_sbstats_seq_show,
2638 };
2639
2640 #define GFS2_SEQ_GOODSIZE min(PAGE_SIZE << PAGE_ALLOC_COSTLY_ORDER, 65536UL)
2641
2642 static int __gfs2_glocks_open(struct inode *inode, struct file *file,
2643 const struct seq_operations *ops)
2644 {
2645 int ret = seq_open_private(file, ops, sizeof(struct gfs2_glock_iter));
2646 if (ret == 0) {
2647 struct seq_file *seq = file->private_data;
2648 struct gfs2_glock_iter *gi = seq->private;
2649
2650 gi->sdp = inode->i_private;
2651 seq->buf = kmalloc(GFS2_SEQ_GOODSIZE, GFP_KERNEL | __GFP_NOWARN);
2652 if (seq->buf)
2653 seq->size = GFS2_SEQ_GOODSIZE;
2654
2655
2656
2657
2658 gi->last_pos = -1;
2659 gi->gl = NULL;
2660 rhashtable_walk_enter(&gl_hash_table, &gi->hti);
2661 }
2662 return ret;
2663 }
2664
2665 static int gfs2_glocks_open(struct inode *inode, struct file *file)
2666 {
2667 return __gfs2_glocks_open(inode, file, &gfs2_glock_seq_ops);
2668 }
2669
2670 static int gfs2_glocks_release(struct inode *inode, struct file *file)
2671 {
2672 struct seq_file *seq = file->private_data;
2673 struct gfs2_glock_iter *gi = seq->private;
2674
2675 if (gi->gl)
2676 gfs2_glock_put(gi->gl);
2677 rhashtable_walk_exit(&gi->hti);
2678 return seq_release_private(inode, file);
2679 }
2680
2681 static int gfs2_glstats_open(struct inode *inode, struct file *file)
2682 {
2683 return __gfs2_glocks_open(inode, file, &gfs2_glstats_seq_ops);
2684 }
2685
2686 static const struct file_operations gfs2_glocks_fops = {
2687 .owner = THIS_MODULE,
2688 .open = gfs2_glocks_open,
2689 .read = seq_read,
2690 .llseek = seq_lseek,
2691 .release = gfs2_glocks_release,
2692 };
2693
2694 static const struct file_operations gfs2_glstats_fops = {
2695 .owner = THIS_MODULE,
2696 .open = gfs2_glstats_open,
2697 .read = seq_read,
2698 .llseek = seq_lseek,
2699 .release = gfs2_glocks_release,
2700 };
2701
2702 DEFINE_SEQ_ATTRIBUTE(gfs2_sbstats);
2703
2704 void gfs2_create_debugfs_file(struct gfs2_sbd *sdp)
2705 {
2706 sdp->debugfs_dir = debugfs_create_dir(sdp->sd_table_name, gfs2_root);
2707
2708 debugfs_create_file("glocks", S_IFREG | S_IRUGO, sdp->debugfs_dir, sdp,
2709 &gfs2_glocks_fops);
2710
2711 debugfs_create_file("glstats", S_IFREG | S_IRUGO, sdp->debugfs_dir, sdp,
2712 &gfs2_glstats_fops);
2713
2714 debugfs_create_file("sbstats", S_IFREG | S_IRUGO, sdp->debugfs_dir, sdp,
2715 &gfs2_sbstats_fops);
2716 }
2717
2718 void gfs2_delete_debugfs_file(struct gfs2_sbd *sdp)
2719 {
2720 debugfs_remove_recursive(sdp->debugfs_dir);
2721 sdp->debugfs_dir = NULL;
2722 }
2723
2724 void gfs2_register_debugfs(void)
2725 {
2726 gfs2_root = debugfs_create_dir("gfs2", NULL);
2727 }
2728
2729 void gfs2_unregister_debugfs(void)
2730 {
2731 debugfs_remove(gfs2_root);
2732 gfs2_root = NULL;
2733 }