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