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