]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - fs/gfs2/glock.c
[GFS2] Get rid of gl_waiters2
[linux-2.6-omap-h63xx.git] / fs / gfs2 / glock.c
1 /*
2  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3  * Copyright (C) 2004-2007 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/completion.h>
14 #include <linux/buffer_head.h>
15 #include <linux/delay.h>
16 #include <linux/sort.h>
17 #include <linux/jhash.h>
18 #include <linux/kallsyms.h>
19 #include <linux/gfs2_ondisk.h>
20 #include <linux/list.h>
21 #include <linux/lm_interface.h>
22 #include <linux/wait.h>
23 #include <linux/module.h>
24 #include <linux/rwsem.h>
25 #include <asm/uaccess.h>
26 #include <linux/seq_file.h>
27 #include <linux/debugfs.h>
28 #include <linux/kthread.h>
29 #include <linux/freezer.h>
30 #include <linux/workqueue.h>
31 #include <linux/jiffies.h>
32
33 #include "gfs2.h"
34 #include "incore.h"
35 #include "glock.h"
36 #include "glops.h"
37 #include "inode.h"
38 #include "lm.h"
39 #include "lops.h"
40 #include "meta_io.h"
41 #include "quota.h"
42 #include "super.h"
43 #include "util.h"
44
45 struct gfs2_gl_hash_bucket {
46         struct hlist_head hb_list;
47 };
48
49 struct glock_iter {
50         int hash;                     /* hash bucket index         */
51         struct gfs2_sbd *sdp;         /* incore superblock         */
52         struct gfs2_glock *gl;        /* current glock struct      */
53         struct seq_file *seq;         /* sequence file for debugfs */
54         char string[512];             /* scratch space             */
55 };
56
57 typedef void (*glock_examiner) (struct gfs2_glock * gl);
58
59 static int gfs2_dump_lockstate(struct gfs2_sbd *sdp);
60 static int dump_glock(struct glock_iter *gi, struct gfs2_glock *gl);
61 static void gfs2_glock_xmote_th(struct gfs2_glock *gl, struct gfs2_holder *gh);
62 static void gfs2_glock_drop_th(struct gfs2_glock *gl);
63 static void run_queue(struct gfs2_glock *gl);
64
65 static DECLARE_RWSEM(gfs2_umount_flush_sem);
66 static struct dentry *gfs2_root;
67 static struct task_struct *scand_process;
68 static unsigned int scand_secs = 5;
69 static struct workqueue_struct *glock_workqueue;
70
71 #define GFS2_GL_HASH_SHIFT      15
72 #define GFS2_GL_HASH_SIZE       (1 << GFS2_GL_HASH_SHIFT)
73 #define GFS2_GL_HASH_MASK       (GFS2_GL_HASH_SIZE - 1)
74
75 static struct gfs2_gl_hash_bucket gl_hash_table[GFS2_GL_HASH_SIZE];
76 static struct dentry *gfs2_root;
77
78 /*
79  * Despite what you might think, the numbers below are not arbitrary :-)
80  * They are taken from the ipv4 routing hash code, which is well tested
81  * and thus should be nearly optimal. Later on we might tweek the numbers
82  * but for now this should be fine.
83  *
84  * The reason for putting the locks in a separate array from the list heads
85  * is that we can have fewer locks than list heads and save memory. We use
86  * the same hash function for both, but with a different hash mask.
87  */
88 #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) || \
89         defined(CONFIG_PROVE_LOCKING)
90
91 #ifdef CONFIG_LOCKDEP
92 # define GL_HASH_LOCK_SZ        256
93 #else
94 # if NR_CPUS >= 32
95 #  define GL_HASH_LOCK_SZ       4096
96 # elif NR_CPUS >= 16
97 #  define GL_HASH_LOCK_SZ       2048
98 # elif NR_CPUS >= 8
99 #  define GL_HASH_LOCK_SZ       1024
100 # elif NR_CPUS >= 4
101 #  define GL_HASH_LOCK_SZ       512
102 # else
103 #  define GL_HASH_LOCK_SZ       256
104 # endif
105 #endif
106
107 /* We never want more locks than chains */
108 #if GFS2_GL_HASH_SIZE < GL_HASH_LOCK_SZ
109 # undef GL_HASH_LOCK_SZ
110 # define GL_HASH_LOCK_SZ GFS2_GL_HASH_SIZE
111 #endif
112
113 static rwlock_t gl_hash_locks[GL_HASH_LOCK_SZ];
114
115 static inline rwlock_t *gl_lock_addr(unsigned int x)
116 {
117         return &gl_hash_locks[x & (GL_HASH_LOCK_SZ-1)];
118 }
119 #else /* not SMP, so no spinlocks required */
120 static inline rwlock_t *gl_lock_addr(unsigned int x)
121 {
122         return NULL;
123 }
124 #endif
125
126 /**
127  * relaxed_state_ok - is a requested lock compatible with the current lock mode?
128  * @actual: the current state of the lock
129  * @requested: the lock state that was requested by the caller
130  * @flags: the modifier flags passed in by the caller
131  *
132  * Returns: 1 if the locks are compatible, 0 otherwise
133  */
134
135 static inline int relaxed_state_ok(unsigned int actual, unsigned requested,
136                                    int flags)
137 {
138         if (actual == requested)
139                 return 1;
140
141         if (flags & GL_EXACT)
142                 return 0;
143
144         if (actual == LM_ST_EXCLUSIVE && requested == LM_ST_SHARED)
145                 return 1;
146
147         if (actual != LM_ST_UNLOCKED && (flags & LM_FLAG_ANY))
148                 return 1;
149
150         return 0;
151 }
152
153 /**
154  * gl_hash() - Turn glock number into hash bucket number
155  * @lock: The glock number
156  *
157  * Returns: The number of the corresponding hash bucket
158  */
159
160 static unsigned int gl_hash(const struct gfs2_sbd *sdp,
161                             const struct lm_lockname *name)
162 {
163         unsigned int h;
164
165         h = jhash(&name->ln_number, sizeof(u64), 0);
166         h = jhash(&name->ln_type, sizeof(unsigned int), h);
167         h = jhash(&sdp, sizeof(struct gfs2_sbd *), h);
168         h &= GFS2_GL_HASH_MASK;
169
170         return h;
171 }
172
173 /**
174  * glock_free() - Perform a few checks and then release struct gfs2_glock
175  * @gl: The glock to release
176  *
177  * Also calls lock module to release its internal structure for this glock.
178  *
179  */
180
181 static void glock_free(struct gfs2_glock *gl)
182 {
183         struct gfs2_sbd *sdp = gl->gl_sbd;
184         struct inode *aspace = gl->gl_aspace;
185
186         gfs2_lm_put_lock(sdp, gl->gl_lock);
187
188         if (aspace)
189                 gfs2_aspace_put(aspace);
190
191         kmem_cache_free(gfs2_glock_cachep, gl);
192 }
193
194 /**
195  * gfs2_glock_hold() - increment reference count on glock
196  * @gl: The glock to hold
197  *
198  */
199
200 static void gfs2_glock_hold(struct gfs2_glock *gl)
201 {
202         atomic_inc(&gl->gl_ref);
203 }
204
205 /**
206  * gfs2_glock_put() - Decrement reference count on glock
207  * @gl: The glock to put
208  *
209  */
210
211 int gfs2_glock_put(struct gfs2_glock *gl)
212 {
213         int rv = 0;
214         struct gfs2_sbd *sdp = gl->gl_sbd;
215
216         write_lock(gl_lock_addr(gl->gl_hash));
217         if (atomic_dec_and_test(&gl->gl_ref)) {
218                 hlist_del(&gl->gl_list);
219                 write_unlock(gl_lock_addr(gl->gl_hash));
220                 gfs2_assert(sdp, gl->gl_state == LM_ST_UNLOCKED);
221                 gfs2_assert(sdp, list_empty(&gl->gl_reclaim));
222                 gfs2_assert(sdp, list_empty(&gl->gl_holders));
223                 gfs2_assert(sdp, list_empty(&gl->gl_waiters1));
224                 gfs2_assert(sdp, list_empty(&gl->gl_waiters3));
225                 glock_free(gl);
226                 rv = 1;
227                 goto out;
228         }
229         write_unlock(gl_lock_addr(gl->gl_hash));
230 out:
231         return rv;
232 }
233
234 /**
235  * search_bucket() - Find struct gfs2_glock by lock number
236  * @bucket: the bucket to search
237  * @name: The lock name
238  *
239  * Returns: NULL, or the struct gfs2_glock with the requested number
240  */
241
242 static struct gfs2_glock *search_bucket(unsigned int hash,
243                                         const struct gfs2_sbd *sdp,
244                                         const struct lm_lockname *name)
245 {
246         struct gfs2_glock *gl;
247         struct hlist_node *h;
248
249         hlist_for_each_entry(gl, h, &gl_hash_table[hash].hb_list, gl_list) {
250                 if (!lm_name_equal(&gl->gl_name, name))
251                         continue;
252                 if (gl->gl_sbd != sdp)
253                         continue;
254
255                 atomic_inc(&gl->gl_ref);
256
257                 return gl;
258         }
259
260         return NULL;
261 }
262
263 /**
264  * gfs2_glock_find() - Find glock by lock number
265  * @sdp: The GFS2 superblock
266  * @name: The lock name
267  *
268  * Returns: NULL, or the struct gfs2_glock with the requested number
269  */
270
271 static struct gfs2_glock *gfs2_glock_find(const struct gfs2_sbd *sdp,
272                                           const struct lm_lockname *name)
273 {
274         unsigned int hash = gl_hash(sdp, name);
275         struct gfs2_glock *gl;
276
277         read_lock(gl_lock_addr(hash));
278         gl = search_bucket(hash, sdp, name);
279         read_unlock(gl_lock_addr(hash));
280
281         return gl;
282 }
283
284 static void glock_work_func(struct work_struct *work)
285 {
286         struct gfs2_glock *gl = container_of(work, struct gfs2_glock, gl_work.work);
287
288         spin_lock(&gl->gl_spin);
289         if (test_and_clear_bit(GLF_PENDING_DEMOTE, &gl->gl_flags))
290                 set_bit(GLF_DEMOTE, &gl->gl_flags);
291         run_queue(gl);
292         spin_unlock(&gl->gl_spin);
293         gfs2_glock_put(gl);
294 }
295
296 /**
297  * gfs2_glock_get() - Get a glock, or create one if one doesn't exist
298  * @sdp: The GFS2 superblock
299  * @number: the lock number
300  * @glops: The glock_operations to use
301  * @create: If 0, don't create the glock if it doesn't exist
302  * @glp: the glock is returned here
303  *
304  * This does not lock a glock, just finds/creates structures for one.
305  *
306  * Returns: errno
307  */
308
309 int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
310                    const struct gfs2_glock_operations *glops, int create,
311                    struct gfs2_glock **glp)
312 {
313         struct lm_lockname name = { .ln_number = number, .ln_type = glops->go_type };
314         struct gfs2_glock *gl, *tmp;
315         unsigned int hash = gl_hash(sdp, &name);
316         int error;
317
318         read_lock(gl_lock_addr(hash));
319         gl = search_bucket(hash, sdp, &name);
320         read_unlock(gl_lock_addr(hash));
321
322         if (gl || !create) {
323                 *glp = gl;
324                 return 0;
325         }
326
327         gl = kmem_cache_alloc(gfs2_glock_cachep, GFP_KERNEL);
328         if (!gl)
329                 return -ENOMEM;
330
331         gl->gl_flags = 0;
332         gl->gl_name = name;
333         atomic_set(&gl->gl_ref, 1);
334         gl->gl_state = LM_ST_UNLOCKED;
335         gl->gl_demote_state = LM_ST_EXCLUSIVE;
336         gl->gl_hash = hash;
337         gl->gl_owner_pid = NULL;
338         gl->gl_ip = 0;
339         gl->gl_ops = glops;
340         gl->gl_req_gh = NULL;
341         gl->gl_req_bh = NULL;
342         gl->gl_vn = 0;
343         gl->gl_stamp = jiffies;
344         gl->gl_tchange = jiffies;
345         gl->gl_object = NULL;
346         gl->gl_sbd = sdp;
347         gl->gl_aspace = NULL;
348         INIT_DELAYED_WORK(&gl->gl_work, glock_work_func);
349
350         /* If this glock protects actual on-disk data or metadata blocks,
351            create a VFS inode to manage the pages/buffers holding them. */
352         if (glops == &gfs2_inode_glops || glops == &gfs2_rgrp_glops) {
353                 gl->gl_aspace = gfs2_aspace_get(sdp);
354                 if (!gl->gl_aspace) {
355                         error = -ENOMEM;
356                         goto fail;
357                 }
358         }
359
360         error = gfs2_lm_get_lock(sdp, &name, &gl->gl_lock);
361         if (error)
362                 goto fail_aspace;
363
364         write_lock(gl_lock_addr(hash));
365         tmp = search_bucket(hash, sdp, &name);
366         if (tmp) {
367                 write_unlock(gl_lock_addr(hash));
368                 glock_free(gl);
369                 gl = tmp;
370         } else {
371                 hlist_add_head(&gl->gl_list, &gl_hash_table[hash].hb_list);
372                 write_unlock(gl_lock_addr(hash));
373         }
374
375         *glp = gl;
376
377         return 0;
378
379 fail_aspace:
380         if (gl->gl_aspace)
381                 gfs2_aspace_put(gl->gl_aspace);
382 fail:
383         kmem_cache_free(gfs2_glock_cachep, gl);
384         return error;
385 }
386
387 /**
388  * gfs2_holder_init - initialize a struct gfs2_holder in the default way
389  * @gl: the glock
390  * @state: the state we're requesting
391  * @flags: the modifier flags
392  * @gh: the holder structure
393  *
394  */
395
396 void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, unsigned flags,
397                       struct gfs2_holder *gh)
398 {
399         INIT_LIST_HEAD(&gh->gh_list);
400         gh->gh_gl = gl;
401         gh->gh_ip = (unsigned long)__builtin_return_address(0);
402         gh->gh_owner_pid = get_pid(task_pid(current));
403         gh->gh_state = state;
404         gh->gh_flags = flags;
405         gh->gh_error = 0;
406         gh->gh_iflags = 0;
407         gfs2_glock_hold(gl);
408 }
409
410 /**
411  * gfs2_holder_reinit - reinitialize a struct gfs2_holder so we can requeue it
412  * @state: the state we're requesting
413  * @flags: the modifier flags
414  * @gh: the holder structure
415  *
416  * Don't mess with the glock.
417  *
418  */
419
420 void gfs2_holder_reinit(unsigned int state, unsigned flags, struct gfs2_holder *gh)
421 {
422         gh->gh_state = state;
423         gh->gh_flags = flags;
424         gh->gh_iflags = 0;
425         gh->gh_ip = (unsigned long)__builtin_return_address(0);
426 }
427
428 /**
429  * gfs2_holder_uninit - uninitialize a holder structure (drop glock reference)
430  * @gh: the holder structure
431  *
432  */
433
434 void gfs2_holder_uninit(struct gfs2_holder *gh)
435 {
436         put_pid(gh->gh_owner_pid);
437         gfs2_glock_put(gh->gh_gl);
438         gh->gh_gl = NULL;
439         gh->gh_ip = 0;
440 }
441
442 static void gfs2_holder_wake(struct gfs2_holder *gh)
443 {
444         clear_bit(HIF_WAIT, &gh->gh_iflags);
445         smp_mb__after_clear_bit();
446         wake_up_bit(&gh->gh_iflags, HIF_WAIT);
447 }
448
449 static int just_schedule(void *word)
450 {
451         schedule();
452         return 0;
453 }
454
455 static void wait_on_holder(struct gfs2_holder *gh)
456 {
457         might_sleep();
458         wait_on_bit(&gh->gh_iflags, HIF_WAIT, just_schedule, TASK_UNINTERRUPTIBLE);
459 }
460
461 static void gfs2_demote_wake(struct gfs2_glock *gl)
462 {
463         gl->gl_demote_state = LM_ST_EXCLUSIVE;
464         clear_bit(GLF_DEMOTE, &gl->gl_flags);
465         smp_mb__after_clear_bit();
466         wake_up_bit(&gl->gl_flags, GLF_DEMOTE);
467 }
468
469 static void wait_on_demote(struct gfs2_glock *gl)
470 {
471         might_sleep();
472         wait_on_bit(&gl->gl_flags, GLF_DEMOTE, just_schedule, TASK_UNINTERRUPTIBLE);
473 }
474
475 /**
476  * rq_mutex - process a mutex request in the queue
477  * @gh: the glock holder
478  *
479  * Returns: 1 if the queue is blocked
480  */
481
482 static int rq_mutex(struct gfs2_holder *gh)
483 {
484         struct gfs2_glock *gl = gh->gh_gl;
485
486         list_del_init(&gh->gh_list);
487         /*  gh->gh_error never examined.  */
488         set_bit(GLF_LOCK, &gl->gl_flags);
489         clear_bit(HIF_WAIT, &gh->gh_iflags);
490         smp_mb();
491         wake_up_bit(&gh->gh_iflags, HIF_WAIT);
492
493         return 1;
494 }
495
496 /**
497  * rq_promote - process a promote request in the queue
498  * @gh: the glock holder
499  *
500  * Acquire a new inter-node lock, or change a lock state to more restrictive.
501  *
502  * Returns: 1 if the queue is blocked
503  */
504
505 static int rq_promote(struct gfs2_holder *gh)
506 {
507         struct gfs2_glock *gl = gh->gh_gl;
508
509         if (!relaxed_state_ok(gl->gl_state, gh->gh_state, gh->gh_flags)) {
510                 if (list_empty(&gl->gl_holders)) {
511                         gl->gl_req_gh = gh;
512                         set_bit(GLF_LOCK, &gl->gl_flags);
513                         spin_unlock(&gl->gl_spin);
514                         gfs2_glock_xmote_th(gh->gh_gl, gh);
515                         spin_lock(&gl->gl_spin);
516                 }
517                 return 1;
518         }
519
520         if (list_empty(&gl->gl_holders)) {
521                 set_bit(HIF_FIRST, &gh->gh_iflags);
522                 set_bit(GLF_LOCK, &gl->gl_flags);
523         } else {
524                 struct gfs2_holder *next_gh;
525                 if (gh->gh_state == LM_ST_EXCLUSIVE)
526                         return 1;
527                 next_gh = list_entry(gl->gl_holders.next, struct gfs2_holder,
528                                      gh_list);
529                 if (next_gh->gh_state == LM_ST_EXCLUSIVE)
530                          return 1;
531         }
532
533         list_move_tail(&gh->gh_list, &gl->gl_holders);
534         gh->gh_error = 0;
535         set_bit(HIF_HOLDER, &gh->gh_iflags);
536
537         gfs2_holder_wake(gh);
538
539         return 0;
540 }
541
542 /**
543  * rq_demote - process a demote request in the queue
544  * @gh: the glock holder
545  *
546  * Returns: 1 if the queue is blocked
547  */
548
549 static int rq_demote(struct gfs2_glock *gl)
550 {
551         if (!list_empty(&gl->gl_holders))
552                 return 1;
553
554         if (gl->gl_state == gl->gl_demote_state ||
555             gl->gl_state == LM_ST_UNLOCKED) {
556                 gfs2_demote_wake(gl);
557                 return 0;
558         }
559
560         set_bit(GLF_LOCK, &gl->gl_flags);
561         set_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags);
562
563         if (gl->gl_demote_state == LM_ST_UNLOCKED ||
564             gl->gl_state != LM_ST_EXCLUSIVE) {
565                 spin_unlock(&gl->gl_spin);
566                 gfs2_glock_drop_th(gl);
567         } else {
568                 spin_unlock(&gl->gl_spin);
569                 gfs2_glock_xmote_th(gl, NULL);
570         }
571
572         spin_lock(&gl->gl_spin);
573         clear_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags);
574
575         return 0;
576 }
577
578 /**
579  * run_queue - process holder structures on a glock
580  * @gl: the glock
581  *
582  */
583 static void run_queue(struct gfs2_glock *gl)
584 {
585         struct gfs2_holder *gh;
586         int blocked = 1;
587
588         for (;;) {
589                 if (test_bit(GLF_LOCK, &gl->gl_flags))
590                         break;
591
592                 if (!list_empty(&gl->gl_waiters1)) {
593                         gh = list_entry(gl->gl_waiters1.next,
594                                         struct gfs2_holder, gh_list);
595                         blocked = rq_mutex(gh);
596                 } else if (test_bit(GLF_DEMOTE, &gl->gl_flags)) {
597                         blocked = rq_demote(gl);
598                         if (test_bit(GLF_WAITERS2, &gl->gl_flags) &&
599                                      !blocked) {
600                                 set_bit(GLF_DEMOTE, &gl->gl_flags);
601                                 gl->gl_demote_state = LM_ST_UNLOCKED;
602                         }
603                         clear_bit(GLF_WAITERS2, &gl->gl_flags);
604                 } else if (!list_empty(&gl->gl_waiters3)) {
605                         gh = list_entry(gl->gl_waiters3.next,
606                                         struct gfs2_holder, gh_list);
607                         blocked = rq_promote(gh);
608                 } else
609                         break;
610
611                 if (blocked)
612                         break;
613         }
614 }
615
616 /**
617  * gfs2_glmutex_lock - acquire a local lock on a glock
618  * @gl: the glock
619  *
620  * Gives caller exclusive access to manipulate a glock structure.
621  */
622
623 static void gfs2_glmutex_lock(struct gfs2_glock *gl)
624 {
625         spin_lock(&gl->gl_spin);
626         if (test_and_set_bit(GLF_LOCK, &gl->gl_flags)) {
627                 struct gfs2_holder gh;
628
629                 gfs2_holder_init(gl, 0, 0, &gh);
630                 set_bit(HIF_WAIT, &gh.gh_iflags);
631                 list_add_tail(&gh.gh_list, &gl->gl_waiters1);
632                 spin_unlock(&gl->gl_spin);
633                 wait_on_holder(&gh);
634                 gfs2_holder_uninit(&gh);
635         } else {
636                 gl->gl_owner_pid = get_pid(task_pid(current));
637                 gl->gl_ip = (unsigned long)__builtin_return_address(0);
638                 spin_unlock(&gl->gl_spin);
639         }
640 }
641
642 /**
643  * gfs2_glmutex_trylock - try to acquire a local lock on a glock
644  * @gl: the glock
645  *
646  * Returns: 1 if the glock is acquired
647  */
648
649 static int gfs2_glmutex_trylock(struct gfs2_glock *gl)
650 {
651         int acquired = 1;
652
653         spin_lock(&gl->gl_spin);
654         if (test_and_set_bit(GLF_LOCK, &gl->gl_flags)) {
655                 acquired = 0;
656         } else {
657                 gl->gl_owner_pid = get_pid(task_pid(current));
658                 gl->gl_ip = (unsigned long)__builtin_return_address(0);
659         }
660         spin_unlock(&gl->gl_spin);
661
662         return acquired;
663 }
664
665 /**
666  * gfs2_glmutex_unlock - release a local lock on a glock
667  * @gl: the glock
668  *
669  */
670
671 static void gfs2_glmutex_unlock(struct gfs2_glock *gl)
672 {
673         struct pid *pid;
674
675         spin_lock(&gl->gl_spin);
676         clear_bit(GLF_LOCK, &gl->gl_flags);
677         pid = gl->gl_owner_pid;
678         gl->gl_owner_pid = NULL;
679         gl->gl_ip = 0;
680         run_queue(gl);
681         spin_unlock(&gl->gl_spin);
682
683         put_pid(pid);
684 }
685
686 /**
687  * handle_callback - process a demote request
688  * @gl: the glock
689  * @state: the state the caller wants us to change to
690  *
691  * There are only two requests that we are going to see in actual
692  * practise: LM_ST_SHARED and LM_ST_UNLOCKED
693  */
694
695 static void handle_callback(struct gfs2_glock *gl, unsigned int state,
696                             int remote, unsigned long delay)
697 {
698         int bit = delay ? GLF_PENDING_DEMOTE : GLF_DEMOTE;
699
700         spin_lock(&gl->gl_spin);
701         set_bit(bit, &gl->gl_flags);
702         if (gl->gl_demote_state == LM_ST_EXCLUSIVE) {
703                 gl->gl_demote_state = state;
704                 gl->gl_demote_time = jiffies;
705                 if (remote && gl->gl_ops->go_type == LM_TYPE_IOPEN &&
706                     gl->gl_object) {
707                         gfs2_glock_schedule_for_reclaim(gl);
708                         spin_unlock(&gl->gl_spin);
709                         return;
710                 }
711         } else if (gl->gl_demote_state != LM_ST_UNLOCKED &&
712                         gl->gl_demote_state != state) {
713                 if (test_bit(GLF_DEMOTE_IN_PROGRESS,  &gl->gl_flags)) 
714                         set_bit(GLF_WAITERS2, &gl->gl_flags);
715                 else 
716                         gl->gl_demote_state = LM_ST_UNLOCKED;
717         }
718         spin_unlock(&gl->gl_spin);
719 }
720
721 /**
722  * state_change - record that the glock is now in a different state
723  * @gl: the glock
724  * @new_state the new state
725  *
726  */
727
728 static void state_change(struct gfs2_glock *gl, unsigned int new_state)
729 {
730         int held1, held2;
731
732         held1 = (gl->gl_state != LM_ST_UNLOCKED);
733         held2 = (new_state != LM_ST_UNLOCKED);
734
735         if (held1 != held2) {
736                 if (held2)
737                         gfs2_glock_hold(gl);
738                 else
739                         gfs2_glock_put(gl);
740         }
741
742         gl->gl_state = new_state;
743         gl->gl_tchange = jiffies;
744 }
745
746 /**
747  * xmote_bh - Called after the lock module is done acquiring a lock
748  * @gl: The glock in question
749  * @ret: the int returned from the lock module
750  *
751  */
752
753 static void xmote_bh(struct gfs2_glock *gl, unsigned int ret)
754 {
755         struct gfs2_sbd *sdp = gl->gl_sbd;
756         const struct gfs2_glock_operations *glops = gl->gl_ops;
757         struct gfs2_holder *gh = gl->gl_req_gh;
758         int prev_state = gl->gl_state;
759         int op_done = 1;
760
761         gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags));
762         gfs2_assert_warn(sdp, list_empty(&gl->gl_holders));
763         gfs2_assert_warn(sdp, !(ret & LM_OUT_ASYNC));
764
765         state_change(gl, ret & LM_OUT_ST_MASK);
766
767         if (prev_state != LM_ST_UNLOCKED && !(ret & LM_OUT_CACHEABLE)) {
768                 if (glops->go_inval)
769                         glops->go_inval(gl, DIO_METADATA);
770         } else if (gl->gl_state == LM_ST_DEFERRED) {
771                 /* We might not want to do this here.
772                    Look at moving to the inode glops. */
773                 if (glops->go_inval)
774                         glops->go_inval(gl, 0);
775         }
776
777         /*  Deal with each possible exit condition  */
778
779         if (!gh) {
780                 gl->gl_stamp = jiffies;
781                 if (ret & LM_OUT_CANCELED) {
782                         op_done = 0;
783                 } else {
784                         spin_lock(&gl->gl_spin);
785                         if (gl->gl_state != gl->gl_demote_state) {
786                                 gl->gl_req_bh = NULL;
787                                 spin_unlock(&gl->gl_spin);
788                                 gfs2_glock_drop_th(gl);
789                                 gfs2_glock_put(gl);
790                                 return;
791                         }
792                         gfs2_demote_wake(gl);
793                         spin_unlock(&gl->gl_spin);
794                 }
795         } else {
796                 spin_lock(&gl->gl_spin);
797                 list_del_init(&gh->gh_list);
798                 gh->gh_error = -EIO;
799                 if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) 
800                         goto out;
801                 gh->gh_error = GLR_CANCELED;
802                 if (ret & LM_OUT_CANCELED) 
803                         goto out;
804                 if (relaxed_state_ok(gl->gl_state, gh->gh_state, gh->gh_flags)) {
805                         list_add_tail(&gh->gh_list, &gl->gl_holders);
806                         gh->gh_error = 0;
807                         set_bit(HIF_HOLDER, &gh->gh_iflags);
808                         set_bit(HIF_FIRST, &gh->gh_iflags);
809                         op_done = 0;
810                         goto out;
811                 }
812                 gh->gh_error = GLR_TRYFAILED;
813                 if (gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB))
814                         goto out;
815                 gh->gh_error = -EINVAL;
816                 if (gfs2_assert_withdraw(sdp, 0) == -1)
817                         fs_err(sdp, "ret = 0x%.8X\n", ret);
818 out:
819                 spin_unlock(&gl->gl_spin);
820         }
821
822         if (glops->go_xmote_bh)
823                 glops->go_xmote_bh(gl);
824
825         if (op_done) {
826                 spin_lock(&gl->gl_spin);
827                 gl->gl_req_gh = NULL;
828                 gl->gl_req_bh = NULL;
829                 clear_bit(GLF_LOCK, &gl->gl_flags);
830                 spin_unlock(&gl->gl_spin);
831         }
832
833         gfs2_glock_put(gl);
834
835         if (gh)
836                 gfs2_holder_wake(gh);
837 }
838
839 /**
840  * gfs2_glock_xmote_th - Call into the lock module to acquire or change a glock
841  * @gl: The glock in question
842  * @state: the requested state
843  * @flags: modifier flags to the lock call
844  *
845  */
846
847 static void gfs2_glock_xmote_th(struct gfs2_glock *gl, struct gfs2_holder *gh)
848 {
849         struct gfs2_sbd *sdp = gl->gl_sbd;
850         int flags = gh ? gh->gh_flags : 0;
851         unsigned state = gh ? gh->gh_state : gl->gl_demote_state;
852         const struct gfs2_glock_operations *glops = gl->gl_ops;
853         int lck_flags = flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB |
854                                  LM_FLAG_NOEXP | LM_FLAG_ANY |
855                                  LM_FLAG_PRIORITY);
856         unsigned int lck_ret;
857
858         if (glops->go_xmote_th)
859                 glops->go_xmote_th(gl);
860
861         gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags));
862         gfs2_assert_warn(sdp, list_empty(&gl->gl_holders));
863         gfs2_assert_warn(sdp, state != LM_ST_UNLOCKED);
864         gfs2_assert_warn(sdp, state != gl->gl_state);
865
866         gfs2_glock_hold(gl);
867         gl->gl_req_bh = xmote_bh;
868
869         lck_ret = gfs2_lm_lock(sdp, gl->gl_lock, gl->gl_state, state, lck_flags);
870
871         if (gfs2_assert_withdraw(sdp, !(lck_ret & LM_OUT_ERROR)))
872                 return;
873
874         if (lck_ret & LM_OUT_ASYNC)
875                 gfs2_assert_warn(sdp, lck_ret == LM_OUT_ASYNC);
876         else
877                 xmote_bh(gl, lck_ret);
878 }
879
880 /**
881  * drop_bh - Called after a lock module unlock completes
882  * @gl: the glock
883  * @ret: the return status
884  *
885  * Doesn't wake up the process waiting on the struct gfs2_holder (if any)
886  * Doesn't drop the reference on the glock the top half took out
887  *
888  */
889
890 static void drop_bh(struct gfs2_glock *gl, unsigned int ret)
891 {
892         struct gfs2_sbd *sdp = gl->gl_sbd;
893         const struct gfs2_glock_operations *glops = gl->gl_ops;
894         struct gfs2_holder *gh = gl->gl_req_gh;
895
896         gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags));
897         gfs2_assert_warn(sdp, list_empty(&gl->gl_holders));
898         gfs2_assert_warn(sdp, !ret);
899
900         state_change(gl, LM_ST_UNLOCKED);
901
902         if (glops->go_inval)
903                 glops->go_inval(gl, DIO_METADATA);
904
905         if (gh) {
906                 spin_lock(&gl->gl_spin);
907                 list_del_init(&gh->gh_list);
908                 gh->gh_error = 0;
909                 spin_unlock(&gl->gl_spin);
910         }
911
912         spin_lock(&gl->gl_spin);
913         gfs2_demote_wake(gl);
914         gl->gl_req_gh = NULL;
915         gl->gl_req_bh = NULL;
916         clear_bit(GLF_LOCK, &gl->gl_flags);
917         spin_unlock(&gl->gl_spin);
918
919         gfs2_glock_put(gl);
920
921         if (gh)
922                 gfs2_holder_wake(gh);
923 }
924
925 /**
926  * gfs2_glock_drop_th - call into the lock module to unlock a lock
927  * @gl: the glock
928  *
929  */
930
931 static void gfs2_glock_drop_th(struct gfs2_glock *gl)
932 {
933         struct gfs2_sbd *sdp = gl->gl_sbd;
934         const struct gfs2_glock_operations *glops = gl->gl_ops;
935         unsigned int ret;
936
937         if (glops->go_xmote_th)
938                 glops->go_xmote_th(gl);
939
940         gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags));
941         gfs2_assert_warn(sdp, list_empty(&gl->gl_holders));
942         gfs2_assert_warn(sdp, gl->gl_state != LM_ST_UNLOCKED);
943
944         gfs2_glock_hold(gl);
945         gl->gl_req_bh = drop_bh;
946
947         ret = gfs2_lm_unlock(sdp, gl->gl_lock, gl->gl_state);
948
949         if (gfs2_assert_withdraw(sdp, !(ret & LM_OUT_ERROR)))
950                 return;
951
952         if (!ret)
953                 drop_bh(gl, ret);
954         else
955                 gfs2_assert_warn(sdp, ret == LM_OUT_ASYNC);
956 }
957
958 /**
959  * do_cancels - cancel requests for locks stuck waiting on an expire flag
960  * @gh: the LM_FLAG_PRIORITY holder waiting to acquire the lock
961  *
962  * Don't cancel GL_NOCANCEL requests.
963  */
964
965 static void do_cancels(struct gfs2_holder *gh)
966 {
967         struct gfs2_glock *gl = gh->gh_gl;
968
969         spin_lock(&gl->gl_spin);
970
971         while (gl->gl_req_gh != gh &&
972                !test_bit(HIF_HOLDER, &gh->gh_iflags) &&
973                !list_empty(&gh->gh_list)) {
974                 if (gl->gl_req_bh && !(gl->gl_req_gh &&
975                                      (gl->gl_req_gh->gh_flags & GL_NOCANCEL))) {
976                         spin_unlock(&gl->gl_spin);
977                         gfs2_lm_cancel(gl->gl_sbd, gl->gl_lock);
978                         msleep(100);
979                         spin_lock(&gl->gl_spin);
980                 } else {
981                         spin_unlock(&gl->gl_spin);
982                         msleep(100);
983                         spin_lock(&gl->gl_spin);
984                 }
985         }
986
987         spin_unlock(&gl->gl_spin);
988 }
989
990 /**
991  * glock_wait_internal - wait on a glock acquisition
992  * @gh: the glock holder
993  *
994  * Returns: 0 on success
995  */
996
997 static int glock_wait_internal(struct gfs2_holder *gh)
998 {
999         struct gfs2_glock *gl = gh->gh_gl;
1000         struct gfs2_sbd *sdp = gl->gl_sbd;
1001         const struct gfs2_glock_operations *glops = gl->gl_ops;
1002
1003         if (test_bit(HIF_ABORTED, &gh->gh_iflags))
1004                 return -EIO;
1005
1006         if (gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB)) {
1007                 spin_lock(&gl->gl_spin);
1008                 if (gl->gl_req_gh != gh &&
1009                     !test_bit(HIF_HOLDER, &gh->gh_iflags) &&
1010                     !list_empty(&gh->gh_list)) {
1011                         list_del_init(&gh->gh_list);
1012                         gh->gh_error = GLR_TRYFAILED;
1013                         run_queue(gl);
1014                         spin_unlock(&gl->gl_spin);
1015                         return gh->gh_error;
1016                 }
1017                 spin_unlock(&gl->gl_spin);
1018         }
1019
1020         if (gh->gh_flags & LM_FLAG_PRIORITY)
1021                 do_cancels(gh);
1022
1023         wait_on_holder(gh);
1024         if (gh->gh_error)
1025                 return gh->gh_error;
1026
1027         gfs2_assert_withdraw(sdp, test_bit(HIF_HOLDER, &gh->gh_iflags));
1028         gfs2_assert_withdraw(sdp, relaxed_state_ok(gl->gl_state, gh->gh_state,
1029                                                    gh->gh_flags));
1030
1031         if (test_bit(HIF_FIRST, &gh->gh_iflags)) {
1032                 gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags));
1033
1034                 if (glops->go_lock) {
1035                         gh->gh_error = glops->go_lock(gh);
1036                         if (gh->gh_error) {
1037                                 spin_lock(&gl->gl_spin);
1038                                 list_del_init(&gh->gh_list);
1039                                 spin_unlock(&gl->gl_spin);
1040                         }
1041                 }
1042
1043                 spin_lock(&gl->gl_spin);
1044                 gl->gl_req_gh = NULL;
1045                 gl->gl_req_bh = NULL;
1046                 clear_bit(GLF_LOCK, &gl->gl_flags);
1047                 run_queue(gl);
1048                 spin_unlock(&gl->gl_spin);
1049         }
1050
1051         return gh->gh_error;
1052 }
1053
1054 static inline struct gfs2_holder *
1055 find_holder_by_owner(struct list_head *head, struct pid *pid)
1056 {
1057         struct gfs2_holder *gh;
1058
1059         list_for_each_entry(gh, head, gh_list) {
1060                 if (gh->gh_owner_pid == pid)
1061                         return gh;
1062         }
1063
1064         return NULL;
1065 }
1066
1067 static void print_dbg(struct glock_iter *gi, const char *fmt, ...)
1068 {
1069         va_list args;
1070
1071         va_start(args, fmt);
1072         if (gi) {
1073                 vsprintf(gi->string, fmt, args);
1074                 seq_printf(gi->seq, gi->string);
1075         }
1076         else
1077                 vprintk(fmt, args);
1078         va_end(args);
1079 }
1080
1081 /**
1082  * add_to_queue - Add a holder to the wait queue (but look for recursion)
1083  * @gh: the holder structure to add
1084  *
1085  */
1086
1087 static void add_to_queue(struct gfs2_holder *gh)
1088 {
1089         struct gfs2_glock *gl = gh->gh_gl;
1090         struct gfs2_holder *existing;
1091
1092         BUG_ON(gh->gh_owner_pid == NULL);
1093         if (test_and_set_bit(HIF_WAIT, &gh->gh_iflags))
1094                 BUG();
1095
1096         if (!(gh->gh_flags & GL_FLOCK)) {
1097                 existing = find_holder_by_owner(&gl->gl_holders, 
1098                                                 gh->gh_owner_pid);
1099                 if (existing) {
1100                         print_symbol(KERN_WARNING "original: %s\n", 
1101                                      existing->gh_ip);
1102                         printk(KERN_INFO "pid : %d\n",
1103                                         pid_nr(existing->gh_owner_pid));
1104                         printk(KERN_INFO "lock type : %d lock state : %d\n",
1105                                existing->gh_gl->gl_name.ln_type, 
1106                                existing->gh_gl->gl_state);
1107                         print_symbol(KERN_WARNING "new: %s\n", gh->gh_ip);
1108                         printk(KERN_INFO "pid : %d\n",
1109                                         pid_nr(gh->gh_owner_pid));
1110                         printk(KERN_INFO "lock type : %d lock state : %d\n",
1111                                gl->gl_name.ln_type, gl->gl_state);
1112                         BUG();
1113                 }
1114                 
1115                 existing = find_holder_by_owner(&gl->gl_waiters3, 
1116                                                 gh->gh_owner_pid);
1117                 if (existing) {
1118                         print_symbol(KERN_WARNING "original: %s\n", 
1119                                      existing->gh_ip);
1120                         print_symbol(KERN_WARNING "new: %s\n", gh->gh_ip);
1121                         BUG();
1122                 }
1123         }
1124
1125         if (gh->gh_flags & LM_FLAG_PRIORITY)
1126                 list_add(&gh->gh_list, &gl->gl_waiters3);
1127         else
1128                 list_add_tail(&gh->gh_list, &gl->gl_waiters3);
1129 }
1130
1131 /**
1132  * gfs2_glock_nq - enqueue a struct gfs2_holder onto a glock (acquire a glock)
1133  * @gh: the holder structure
1134  *
1135  * if (gh->gh_flags & GL_ASYNC), this never returns an error
1136  *
1137  * Returns: 0, GLR_TRYFAILED, or errno on failure
1138  */
1139
1140 int gfs2_glock_nq(struct gfs2_holder *gh)
1141 {
1142         struct gfs2_glock *gl = gh->gh_gl;
1143         struct gfs2_sbd *sdp = gl->gl_sbd;
1144         int error = 0;
1145
1146 restart:
1147         if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) {
1148                 set_bit(HIF_ABORTED, &gh->gh_iflags);
1149                 return -EIO;
1150         }
1151
1152         spin_lock(&gl->gl_spin);
1153         add_to_queue(gh);
1154         run_queue(gl);
1155         spin_unlock(&gl->gl_spin);
1156
1157         if (!(gh->gh_flags & GL_ASYNC)) {
1158                 error = glock_wait_internal(gh);
1159                 if (error == GLR_CANCELED) {
1160                         msleep(100);
1161                         goto restart;
1162                 }
1163         }
1164
1165         return error;
1166 }
1167
1168 /**
1169  * gfs2_glock_poll - poll to see if an async request has been completed
1170  * @gh: the holder
1171  *
1172  * Returns: 1 if the request is ready to be gfs2_glock_wait()ed on
1173  */
1174
1175 int gfs2_glock_poll(struct gfs2_holder *gh)
1176 {
1177         struct gfs2_glock *gl = gh->gh_gl;
1178         int ready = 0;
1179
1180         spin_lock(&gl->gl_spin);
1181
1182         if (test_bit(HIF_HOLDER, &gh->gh_iflags))
1183                 ready = 1;
1184         else if (list_empty(&gh->gh_list)) {
1185                 if (gh->gh_error == GLR_CANCELED) {
1186                         spin_unlock(&gl->gl_spin);
1187                         msleep(100);
1188                         if (gfs2_glock_nq(gh))
1189                                 return 1;
1190                         return 0;
1191                 } else
1192                         ready = 1;
1193         }
1194
1195         spin_unlock(&gl->gl_spin);
1196
1197         return ready;
1198 }
1199
1200 /**
1201  * gfs2_glock_wait - wait for a lock acquisition that ended in a GLR_ASYNC
1202  * @gh: the holder structure
1203  *
1204  * Returns: 0, GLR_TRYFAILED, or errno on failure
1205  */
1206
1207 int gfs2_glock_wait(struct gfs2_holder *gh)
1208 {
1209         int error;
1210
1211         error = glock_wait_internal(gh);
1212         if (error == GLR_CANCELED) {
1213                 msleep(100);
1214                 gh->gh_flags &= ~GL_ASYNC;
1215                 error = gfs2_glock_nq(gh);
1216         }
1217
1218         return error;
1219 }
1220
1221 /**
1222  * gfs2_glock_dq - dequeue a struct gfs2_holder from a glock (release a glock)
1223  * @gh: the glock holder
1224  *
1225  */
1226
1227 void gfs2_glock_dq(struct gfs2_holder *gh)
1228 {
1229         struct gfs2_glock *gl = gh->gh_gl;
1230         const struct gfs2_glock_operations *glops = gl->gl_ops;
1231         unsigned delay = 0;
1232
1233         if (gh->gh_flags & GL_NOCACHE)
1234                 handle_callback(gl, LM_ST_UNLOCKED, 0, 0);
1235
1236         gfs2_glmutex_lock(gl);
1237
1238         spin_lock(&gl->gl_spin);
1239         list_del_init(&gh->gh_list);
1240
1241         if (list_empty(&gl->gl_holders)) {
1242                 if (glops->go_unlock) {
1243                         spin_unlock(&gl->gl_spin);
1244                         glops->go_unlock(gh);
1245                         spin_lock(&gl->gl_spin);
1246                 }
1247                 gl->gl_stamp = jiffies;
1248         }
1249
1250         clear_bit(GLF_LOCK, &gl->gl_flags);
1251         spin_unlock(&gl->gl_spin);
1252
1253         gfs2_glock_hold(gl);
1254         if (test_bit(GLF_PENDING_DEMOTE, &gl->gl_flags) &&
1255             !test_bit(GLF_DEMOTE, &gl->gl_flags))
1256                 delay = gl->gl_ops->go_min_hold_time;
1257         if (queue_delayed_work(glock_workqueue, &gl->gl_work, delay) == 0)
1258                 gfs2_glock_put(gl);
1259 }
1260
1261 void gfs2_glock_dq_wait(struct gfs2_holder *gh)
1262 {
1263         struct gfs2_glock *gl = gh->gh_gl;
1264         gfs2_glock_dq(gh);
1265         wait_on_demote(gl);
1266 }
1267
1268 /**
1269  * gfs2_glock_dq_uninit - dequeue a holder from a glock and initialize it
1270  * @gh: the holder structure
1271  *
1272  */
1273
1274 void gfs2_glock_dq_uninit(struct gfs2_holder *gh)
1275 {
1276         gfs2_glock_dq(gh);
1277         gfs2_holder_uninit(gh);
1278 }
1279
1280 /**
1281  * gfs2_glock_nq_num - acquire a glock based on lock number
1282  * @sdp: the filesystem
1283  * @number: the lock number
1284  * @glops: the glock operations for the type of glock
1285  * @state: the state to acquire the glock in
1286  * @flags: modifier flags for the aquisition
1287  * @gh: the struct gfs2_holder
1288  *
1289  * Returns: errno
1290  */
1291
1292 int gfs2_glock_nq_num(struct gfs2_sbd *sdp, u64 number,
1293                       const struct gfs2_glock_operations *glops,
1294                       unsigned int state, int flags, struct gfs2_holder *gh)
1295 {
1296         struct gfs2_glock *gl;
1297         int error;
1298
1299         error = gfs2_glock_get(sdp, number, glops, CREATE, &gl);
1300         if (!error) {
1301                 error = gfs2_glock_nq_init(gl, state, flags, gh);
1302                 gfs2_glock_put(gl);
1303         }
1304
1305         return error;
1306 }
1307
1308 /**
1309  * glock_compare - Compare two struct gfs2_glock structures for sorting
1310  * @arg_a: the first structure
1311  * @arg_b: the second structure
1312  *
1313  */
1314
1315 static int glock_compare(const void *arg_a, const void *arg_b)
1316 {
1317         const struct gfs2_holder *gh_a = *(const struct gfs2_holder **)arg_a;
1318         const struct gfs2_holder *gh_b = *(const struct gfs2_holder **)arg_b;
1319         const struct lm_lockname *a = &gh_a->gh_gl->gl_name;
1320         const struct lm_lockname *b = &gh_b->gh_gl->gl_name;
1321
1322         if (a->ln_number > b->ln_number)
1323                 return 1;
1324         if (a->ln_number < b->ln_number)
1325                 return -1;
1326         BUG_ON(gh_a->gh_gl->gl_ops->go_type == gh_b->gh_gl->gl_ops->go_type);
1327         return 0;
1328 }
1329
1330 /**
1331  * nq_m_sync - synchonously acquire more than one glock in deadlock free order
1332  * @num_gh: the number of structures
1333  * @ghs: an array of struct gfs2_holder structures
1334  *
1335  * Returns: 0 on success (all glocks acquired),
1336  *          errno on failure (no glocks acquired)
1337  */
1338
1339 static int nq_m_sync(unsigned int num_gh, struct gfs2_holder *ghs,
1340                      struct gfs2_holder **p)
1341 {
1342         unsigned int x;
1343         int error = 0;
1344
1345         for (x = 0; x < num_gh; x++)
1346                 p[x] = &ghs[x];
1347
1348         sort(p, num_gh, sizeof(struct gfs2_holder *), glock_compare, NULL);
1349
1350         for (x = 0; x < num_gh; x++) {
1351                 p[x]->gh_flags &= ~(LM_FLAG_TRY | GL_ASYNC);
1352
1353                 error = gfs2_glock_nq(p[x]);
1354                 if (error) {
1355                         while (x--)
1356                                 gfs2_glock_dq(p[x]);
1357                         break;
1358                 }
1359         }
1360
1361         return error;
1362 }
1363
1364 /**
1365  * gfs2_glock_nq_m - acquire multiple glocks
1366  * @num_gh: the number of structures
1367  * @ghs: an array of struct gfs2_holder structures
1368  *
1369  *
1370  * Returns: 0 on success (all glocks acquired),
1371  *          errno on failure (no glocks acquired)
1372  */
1373
1374 int gfs2_glock_nq_m(unsigned int num_gh, struct gfs2_holder *ghs)
1375 {
1376         struct gfs2_holder *tmp[4];
1377         struct gfs2_holder **pph = tmp;
1378         int error = 0;
1379
1380         switch(num_gh) {
1381         case 0:
1382                 return 0;
1383         case 1:
1384                 ghs->gh_flags &= ~(LM_FLAG_TRY | GL_ASYNC);
1385                 return gfs2_glock_nq(ghs);
1386         default:
1387                 if (num_gh <= 4)
1388                         break;
1389                 pph = kmalloc(num_gh * sizeof(struct gfs2_holder *), GFP_NOFS);
1390                 if (!pph)
1391                         return -ENOMEM;
1392         }
1393
1394         error = nq_m_sync(num_gh, ghs, pph);
1395
1396         if (pph != tmp)
1397                 kfree(pph);
1398
1399         return error;
1400 }
1401
1402 /**
1403  * gfs2_glock_dq_m - release multiple glocks
1404  * @num_gh: the number of structures
1405  * @ghs: an array of struct gfs2_holder structures
1406  *
1407  */
1408
1409 void gfs2_glock_dq_m(unsigned int num_gh, struct gfs2_holder *ghs)
1410 {
1411         unsigned int x;
1412
1413         for (x = 0; x < num_gh; x++)
1414                 gfs2_glock_dq(&ghs[x]);
1415 }
1416
1417 /**
1418  * gfs2_glock_dq_uninit_m - release multiple glocks
1419  * @num_gh: the number of structures
1420  * @ghs: an array of struct gfs2_holder structures
1421  *
1422  */
1423
1424 void gfs2_glock_dq_uninit_m(unsigned int num_gh, struct gfs2_holder *ghs)
1425 {
1426         unsigned int x;
1427
1428         for (x = 0; x < num_gh; x++)
1429                 gfs2_glock_dq_uninit(&ghs[x]);
1430 }
1431
1432 /**
1433  * gfs2_lvb_hold - attach a LVB from a glock
1434  * @gl: The glock in question
1435  *
1436  */
1437
1438 int gfs2_lvb_hold(struct gfs2_glock *gl)
1439 {
1440         int error;
1441
1442         gfs2_glmutex_lock(gl);
1443
1444         if (!atomic_read(&gl->gl_lvb_count)) {
1445                 error = gfs2_lm_hold_lvb(gl->gl_sbd, gl->gl_lock, &gl->gl_lvb);
1446                 if (error) {
1447                         gfs2_glmutex_unlock(gl);
1448                         return error;
1449                 }
1450                 gfs2_glock_hold(gl);
1451         }
1452         atomic_inc(&gl->gl_lvb_count);
1453
1454         gfs2_glmutex_unlock(gl);
1455
1456         return 0;
1457 }
1458
1459 /**
1460  * gfs2_lvb_unhold - detach a LVB from a glock
1461  * @gl: The glock in question
1462  *
1463  */
1464
1465 void gfs2_lvb_unhold(struct gfs2_glock *gl)
1466 {
1467         gfs2_glock_hold(gl);
1468         gfs2_glmutex_lock(gl);
1469
1470         gfs2_assert(gl->gl_sbd, atomic_read(&gl->gl_lvb_count) > 0);
1471         if (atomic_dec_and_test(&gl->gl_lvb_count)) {
1472                 gfs2_lm_unhold_lvb(gl->gl_sbd, gl->gl_lock, gl->gl_lvb);
1473                 gl->gl_lvb = NULL;
1474                 gfs2_glock_put(gl);
1475         }
1476
1477         gfs2_glmutex_unlock(gl);
1478         gfs2_glock_put(gl);
1479 }
1480
1481 static void blocking_cb(struct gfs2_sbd *sdp, struct lm_lockname *name,
1482                         unsigned int state)
1483 {
1484         struct gfs2_glock *gl;
1485         unsigned long delay = 0;
1486         unsigned long holdtime;
1487         unsigned long now = jiffies;
1488
1489         gl = gfs2_glock_find(sdp, name);
1490         if (!gl)
1491                 return;
1492
1493         holdtime = gl->gl_tchange + gl->gl_ops->go_min_hold_time;
1494         if (time_before(now, holdtime))
1495                 delay = holdtime - now;
1496
1497         handle_callback(gl, state, 1, delay);
1498         if (queue_delayed_work(glock_workqueue, &gl->gl_work, delay) == 0)
1499                 gfs2_glock_put(gl);
1500 }
1501
1502 /**
1503  * gfs2_glock_cb - Callback used by locking module
1504  * @sdp: Pointer to the superblock
1505  * @type: Type of callback
1506  * @data: Type dependent data pointer
1507  *
1508  * Called by the locking module when it wants to tell us something.
1509  * Either we need to drop a lock, one of our ASYNC requests completed, or
1510  * a journal from another client needs to be recovered.
1511  */
1512
1513 void gfs2_glock_cb(void *cb_data, unsigned int type, void *data)
1514 {
1515         struct gfs2_sbd *sdp = cb_data;
1516
1517         switch (type) {
1518         case LM_CB_NEED_E:
1519                 blocking_cb(sdp, data, LM_ST_UNLOCKED);
1520                 return;
1521
1522         case LM_CB_NEED_D:
1523                 blocking_cb(sdp, data, LM_ST_DEFERRED);
1524                 return;
1525
1526         case LM_CB_NEED_S:
1527                 blocking_cb(sdp, data, LM_ST_SHARED);
1528                 return;
1529
1530         case LM_CB_ASYNC: {
1531                 struct lm_async_cb *async = data;
1532                 struct gfs2_glock *gl;
1533
1534                 down_read(&gfs2_umount_flush_sem);
1535                 gl = gfs2_glock_find(sdp, &async->lc_name);
1536                 if (gfs2_assert_warn(sdp, gl))
1537                         return;
1538                 if (!gfs2_assert_warn(sdp, gl->gl_req_bh))
1539                         gl->gl_req_bh(gl, async->lc_ret);
1540                 if (queue_delayed_work(glock_workqueue, &gl->gl_work, 0) == 0)
1541                         gfs2_glock_put(gl);
1542                 up_read(&gfs2_umount_flush_sem);
1543                 return;
1544         }
1545
1546         case LM_CB_NEED_RECOVERY:
1547                 gfs2_jdesc_make_dirty(sdp, *(unsigned int *)data);
1548                 if (sdp->sd_recoverd_process)
1549                         wake_up_process(sdp->sd_recoverd_process);
1550                 return;
1551
1552         case LM_CB_DROPLOCKS:
1553                 gfs2_gl_hash_clear(sdp, NO_WAIT);
1554                 gfs2_quota_scan(sdp);
1555                 return;
1556
1557         default:
1558                 gfs2_assert_warn(sdp, 0);
1559                 return;
1560         }
1561 }
1562
1563 /**
1564  * demote_ok - Check to see if it's ok to unlock a glock
1565  * @gl: the glock
1566  *
1567  * Returns: 1 if it's ok
1568  */
1569
1570 static int demote_ok(struct gfs2_glock *gl)
1571 {
1572         const struct gfs2_glock_operations *glops = gl->gl_ops;
1573         int demote = 1;
1574
1575         if (test_bit(GLF_STICKY, &gl->gl_flags))
1576                 demote = 0;
1577         else if (glops->go_demote_ok)
1578                 demote = glops->go_demote_ok(gl);
1579
1580         return demote;
1581 }
1582
1583 /**
1584  * gfs2_glock_schedule_for_reclaim - Add a glock to the reclaim list
1585  * @gl: the glock
1586  *
1587  */
1588
1589 void gfs2_glock_schedule_for_reclaim(struct gfs2_glock *gl)
1590 {
1591         struct gfs2_sbd *sdp = gl->gl_sbd;
1592
1593         spin_lock(&sdp->sd_reclaim_lock);
1594         if (list_empty(&gl->gl_reclaim)) {
1595                 gfs2_glock_hold(gl);
1596                 list_add(&gl->gl_reclaim, &sdp->sd_reclaim_list);
1597                 atomic_inc(&sdp->sd_reclaim_count);
1598                 spin_unlock(&sdp->sd_reclaim_lock);
1599                 wake_up(&sdp->sd_reclaim_wq);
1600         } else
1601                 spin_unlock(&sdp->sd_reclaim_lock);
1602 }
1603
1604 /**
1605  * gfs2_reclaim_glock - process the next glock on the filesystem's reclaim list
1606  * @sdp: the filesystem
1607  *
1608  * Called from gfs2_glockd() glock reclaim daemon, or when promoting a
1609  * different glock and we notice that there are a lot of glocks in the
1610  * reclaim list.
1611  *
1612  */
1613
1614 void gfs2_reclaim_glock(struct gfs2_sbd *sdp)
1615 {
1616         struct gfs2_glock *gl;
1617
1618         spin_lock(&sdp->sd_reclaim_lock);
1619         if (list_empty(&sdp->sd_reclaim_list)) {
1620                 spin_unlock(&sdp->sd_reclaim_lock);
1621                 return;
1622         }
1623         gl = list_entry(sdp->sd_reclaim_list.next,
1624                         struct gfs2_glock, gl_reclaim);
1625         list_del_init(&gl->gl_reclaim);
1626         spin_unlock(&sdp->sd_reclaim_lock);
1627
1628         atomic_dec(&sdp->sd_reclaim_count);
1629         atomic_inc(&sdp->sd_reclaimed);
1630
1631         if (gfs2_glmutex_trylock(gl)) {
1632                 if (list_empty(&gl->gl_holders) &&
1633                     gl->gl_state != LM_ST_UNLOCKED && demote_ok(gl))
1634                         handle_callback(gl, LM_ST_UNLOCKED, 0, 0);
1635                 gfs2_glmutex_unlock(gl);
1636         }
1637
1638         gfs2_glock_put(gl);
1639 }
1640
1641 /**
1642  * examine_bucket - Call a function for glock in a hash bucket
1643  * @examiner: the function
1644  * @sdp: the filesystem
1645  * @bucket: the bucket
1646  *
1647  * Returns: 1 if the bucket has entries
1648  */
1649
1650 static int examine_bucket(glock_examiner examiner, struct gfs2_sbd *sdp,
1651                           unsigned int hash)
1652 {
1653         struct gfs2_glock *gl, *prev = NULL;
1654         int has_entries = 0;
1655         struct hlist_head *head = &gl_hash_table[hash].hb_list;
1656
1657         read_lock(gl_lock_addr(hash));
1658         /* Can't use hlist_for_each_entry - don't want prefetch here */
1659         if (hlist_empty(head))
1660                 goto out;
1661         gl = list_entry(head->first, struct gfs2_glock, gl_list);
1662         while(1) {
1663                 if (!sdp || gl->gl_sbd == sdp) {
1664                         gfs2_glock_hold(gl);
1665                         read_unlock(gl_lock_addr(hash));
1666                         if (prev)
1667                                 gfs2_glock_put(prev);
1668                         prev = gl;
1669                         examiner(gl);
1670                         has_entries = 1;
1671                         read_lock(gl_lock_addr(hash));
1672                 }
1673                 if (gl->gl_list.next == NULL)
1674                         break;
1675                 gl = list_entry(gl->gl_list.next, struct gfs2_glock, gl_list);
1676         }
1677 out:
1678         read_unlock(gl_lock_addr(hash));
1679         if (prev)
1680                 gfs2_glock_put(prev);
1681         cond_resched();
1682         return has_entries;
1683 }
1684
1685 /**
1686  * scan_glock - look at a glock and see if we can reclaim it
1687  * @gl: the glock to look at
1688  *
1689  */
1690
1691 static void scan_glock(struct gfs2_glock *gl)
1692 {
1693         if (gl->gl_ops == &gfs2_inode_glops && gl->gl_object)
1694                 return;
1695
1696         if (gfs2_glmutex_trylock(gl)) {
1697                 if (list_empty(&gl->gl_holders) &&
1698                     gl->gl_state != LM_ST_UNLOCKED && demote_ok(gl))
1699                         goto out_schedule;
1700                 gfs2_glmutex_unlock(gl);
1701         }
1702         return;
1703
1704 out_schedule:
1705         gfs2_glmutex_unlock(gl);
1706         gfs2_glock_schedule_for_reclaim(gl);
1707 }
1708
1709 /**
1710  * clear_glock - look at a glock and see if we can free it from glock cache
1711  * @gl: the glock to look at
1712  *
1713  */
1714
1715 static void clear_glock(struct gfs2_glock *gl)
1716 {
1717         struct gfs2_sbd *sdp = gl->gl_sbd;
1718         int released;
1719
1720         spin_lock(&sdp->sd_reclaim_lock);
1721         if (!list_empty(&gl->gl_reclaim)) {
1722                 list_del_init(&gl->gl_reclaim);
1723                 atomic_dec(&sdp->sd_reclaim_count);
1724                 spin_unlock(&sdp->sd_reclaim_lock);
1725                 released = gfs2_glock_put(gl);
1726                 gfs2_assert(sdp, !released);
1727         } else {
1728                 spin_unlock(&sdp->sd_reclaim_lock);
1729         }
1730
1731         if (gfs2_glmutex_trylock(gl)) {
1732                 if (list_empty(&gl->gl_holders) &&
1733                     gl->gl_state != LM_ST_UNLOCKED)
1734                         handle_callback(gl, LM_ST_UNLOCKED, 0, 0);
1735                 gfs2_glmutex_unlock(gl);
1736         }
1737 }
1738
1739 /**
1740  * gfs2_gl_hash_clear - Empty out the glock hash table
1741  * @sdp: the filesystem
1742  * @wait: wait until it's all gone
1743  *
1744  * Called when unmounting the filesystem, or when inter-node lock manager
1745  * requests DROPLOCKS because it is running out of capacity.
1746  */
1747
1748 void gfs2_gl_hash_clear(struct gfs2_sbd *sdp, int wait)
1749 {
1750         unsigned long t;
1751         unsigned int x;
1752         int cont;
1753
1754         t = jiffies;
1755
1756         for (;;) {
1757                 cont = 0;
1758                 for (x = 0; x < GFS2_GL_HASH_SIZE; x++) {
1759                         if (examine_bucket(clear_glock, sdp, x))
1760                                 cont = 1;
1761                 }
1762
1763                 if (!wait || !cont)
1764                         break;
1765
1766                 if (time_after_eq(jiffies,
1767                                   t + gfs2_tune_get(sdp, gt_stall_secs) * HZ)) {
1768                         fs_warn(sdp, "Unmount seems to be stalled. "
1769                                      "Dumping lock state...\n");
1770                         gfs2_dump_lockstate(sdp);
1771                         t = jiffies;
1772                 }
1773
1774                 down_write(&gfs2_umount_flush_sem);
1775                 invalidate_inodes(sdp->sd_vfs);
1776                 up_write(&gfs2_umount_flush_sem);
1777                 msleep(10);
1778         }
1779 }
1780
1781 /*
1782  *  Diagnostic routines to help debug distributed deadlock
1783  */
1784
1785 static void gfs2_print_symbol(struct glock_iter *gi, const char *fmt,
1786                               unsigned long address)
1787 {
1788         char buffer[KSYM_SYMBOL_LEN];
1789
1790         sprint_symbol(buffer, address);
1791         print_dbg(gi, fmt, buffer);
1792 }
1793
1794 /**
1795  * dump_holder - print information about a glock holder
1796  * @str: a string naming the type of holder
1797  * @gh: the glock holder
1798  *
1799  * Returns: 0 on success, -ENOBUFS when we run out of space
1800  */
1801
1802 static int dump_holder(struct glock_iter *gi, char *str,
1803                        struct gfs2_holder *gh)
1804 {
1805         unsigned int x;
1806         struct task_struct *gh_owner;
1807
1808         print_dbg(gi, "  %s\n", str);
1809         if (gh->gh_owner_pid) {
1810                 print_dbg(gi, "    owner = %ld ",
1811                                 (long)pid_nr(gh->gh_owner_pid));
1812                 gh_owner = pid_task(gh->gh_owner_pid, PIDTYPE_PID);
1813                 if (gh_owner)
1814                         print_dbg(gi, "(%s)\n", gh_owner->comm);
1815                 else
1816                         print_dbg(gi, "(ended)\n");
1817         } else
1818                 print_dbg(gi, "    owner = -1\n");
1819         print_dbg(gi, "    gh_state = %u\n", gh->gh_state);
1820         print_dbg(gi, "    gh_flags =");
1821         for (x = 0; x < 32; x++)
1822                 if (gh->gh_flags & (1 << x))
1823                         print_dbg(gi, " %u", x);
1824         print_dbg(gi, " \n");
1825         print_dbg(gi, "    error = %d\n", gh->gh_error);
1826         print_dbg(gi, "    gh_iflags =");
1827         for (x = 0; x < 32; x++)
1828                 if (test_bit(x, &gh->gh_iflags))
1829                         print_dbg(gi, " %u", x);
1830         print_dbg(gi, " \n");
1831         gfs2_print_symbol(gi, "    initialized at: %s\n", gh->gh_ip);
1832
1833         return 0;
1834 }
1835
1836 /**
1837  * dump_inode - print information about an inode
1838  * @ip: the inode
1839  *
1840  * Returns: 0 on success, -ENOBUFS when we run out of space
1841  */
1842
1843 static int dump_inode(struct glock_iter *gi, struct gfs2_inode *ip)
1844 {
1845         unsigned int x;
1846
1847         print_dbg(gi, "  Inode:\n");
1848         print_dbg(gi, "    num = %llu/%llu\n",
1849                   (unsigned long long)ip->i_no_formal_ino,
1850                   (unsigned long long)ip->i_no_addr);
1851         print_dbg(gi, "    type = %u\n", IF2DT(ip->i_inode.i_mode));
1852         print_dbg(gi, "    i_flags =");
1853         for (x = 0; x < 32; x++)
1854                 if (test_bit(x, &ip->i_flags))
1855                         print_dbg(gi, " %u", x);
1856         print_dbg(gi, " \n");
1857         return 0;
1858 }
1859
1860 /**
1861  * dump_glock - print information about a glock
1862  * @gl: the glock
1863  * @count: where we are in the buffer
1864  *
1865  * Returns: 0 on success, -ENOBUFS when we run out of space
1866  */
1867
1868 static int dump_glock(struct glock_iter *gi, struct gfs2_glock *gl)
1869 {
1870         struct gfs2_holder *gh;
1871         unsigned int x;
1872         int error = -ENOBUFS;
1873         struct task_struct *gl_owner;
1874
1875         spin_lock(&gl->gl_spin);
1876
1877         print_dbg(gi, "Glock 0x%p (%u, 0x%llx)\n", gl, gl->gl_name.ln_type,
1878                    (unsigned long long)gl->gl_name.ln_number);
1879         print_dbg(gi, "  gl_flags =");
1880         for (x = 0; x < 32; x++) {
1881                 if (test_bit(x, &gl->gl_flags))
1882                         print_dbg(gi, " %u", x);
1883         }
1884         if (!test_bit(GLF_LOCK, &gl->gl_flags))
1885                 print_dbg(gi, " (unlocked)");
1886         print_dbg(gi, " \n");
1887         print_dbg(gi, "  gl_ref = %d\n", atomic_read(&gl->gl_ref));
1888         print_dbg(gi, "  gl_state = %u\n", gl->gl_state);
1889         if (gl->gl_owner_pid) {
1890                 gl_owner = pid_task(gl->gl_owner_pid, PIDTYPE_PID);
1891                 if (gl_owner)
1892                         print_dbg(gi, "  gl_owner = pid %d (%s)\n",
1893                                   pid_nr(gl->gl_owner_pid), gl_owner->comm);
1894                 else
1895                         print_dbg(gi, "  gl_owner = %d (ended)\n",
1896                                   pid_nr(gl->gl_owner_pid));
1897         } else
1898                 print_dbg(gi, "  gl_owner = -1\n");
1899         print_dbg(gi, "  gl_ip = %lu\n", gl->gl_ip);
1900         print_dbg(gi, "  req_gh = %s\n", (gl->gl_req_gh) ? "yes" : "no");
1901         print_dbg(gi, "  req_bh = %s\n", (gl->gl_req_bh) ? "yes" : "no");
1902         print_dbg(gi, "  lvb_count = %d\n", atomic_read(&gl->gl_lvb_count));
1903         print_dbg(gi, "  object = %s\n", (gl->gl_object) ? "yes" : "no");
1904         print_dbg(gi, "  reclaim = %s\n",
1905                    (list_empty(&gl->gl_reclaim)) ? "no" : "yes");
1906         if (gl->gl_aspace)
1907                 print_dbg(gi, "  aspace = 0x%p nrpages = %lu\n", gl->gl_aspace,
1908                            gl->gl_aspace->i_mapping->nrpages);
1909         else
1910                 print_dbg(gi, "  aspace = no\n");
1911         print_dbg(gi, "  ail = %d\n", atomic_read(&gl->gl_ail_count));
1912         if (gl->gl_req_gh) {
1913                 error = dump_holder(gi, "Request", gl->gl_req_gh);
1914                 if (error)
1915                         goto out;
1916         }
1917         list_for_each_entry(gh, &gl->gl_holders, gh_list) {
1918                 error = dump_holder(gi, "Holder", gh);
1919                 if (error)
1920                         goto out;
1921         }
1922         list_for_each_entry(gh, &gl->gl_waiters1, gh_list) {
1923                 error = dump_holder(gi, "Waiter1", gh);
1924                 if (error)
1925                         goto out;
1926         }
1927         list_for_each_entry(gh, &gl->gl_waiters3, gh_list) {
1928                 error = dump_holder(gi, "Waiter3", gh);
1929                 if (error)
1930                         goto out;
1931         }
1932         if (test_bit(GLF_DEMOTE, &gl->gl_flags)) {
1933                 print_dbg(gi, "  Demotion req to state %u (%llu uS ago)\n",
1934                           gl->gl_demote_state, (unsigned long long)
1935                           (jiffies - gl->gl_demote_time)*(1000000/HZ));
1936         }
1937         if (gl->gl_ops == &gfs2_inode_glops && gl->gl_object) {
1938                 if (!test_bit(GLF_LOCK, &gl->gl_flags) &&
1939                         list_empty(&gl->gl_holders)) {
1940                         error = dump_inode(gi, gl->gl_object);
1941                         if (error)
1942                                 goto out;
1943                 } else {
1944                         error = -ENOBUFS;
1945                         print_dbg(gi, "  Inode: busy\n");
1946                 }
1947         }
1948
1949         error = 0;
1950
1951 out:
1952         spin_unlock(&gl->gl_spin);
1953         return error;
1954 }
1955
1956 /**
1957  * gfs2_dump_lockstate - print out the current lockstate
1958  * @sdp: the filesystem
1959  * @ub: the buffer to copy the information into
1960  *
1961  * If @ub is NULL, dump the lockstate to the console.
1962  *
1963  */
1964
1965 static int gfs2_dump_lockstate(struct gfs2_sbd *sdp)
1966 {
1967         struct gfs2_glock *gl;
1968         struct hlist_node *h;
1969         unsigned int x;
1970         int error = 0;
1971
1972         for (x = 0; x < GFS2_GL_HASH_SIZE; x++) {
1973
1974                 read_lock(gl_lock_addr(x));
1975
1976                 hlist_for_each_entry(gl, h, &gl_hash_table[x].hb_list, gl_list) {
1977                         if (gl->gl_sbd != sdp)
1978                                 continue;
1979
1980                         error = dump_glock(NULL, gl);
1981                         if (error)
1982                                 break;
1983                 }
1984
1985                 read_unlock(gl_lock_addr(x));
1986
1987                 if (error)
1988                         break;
1989         }
1990
1991
1992         return error;
1993 }
1994
1995 /**
1996  * gfs2_scand - Look for cached glocks and inodes to toss from memory
1997  * @sdp: Pointer to GFS2 superblock
1998  *
1999  * One of these daemons runs, finding candidates to add to sd_reclaim_list.
2000  * See gfs2_glockd()
2001  */
2002
2003 static int gfs2_scand(void *data)
2004 {
2005         unsigned x;
2006         unsigned delay;
2007
2008         while (!kthread_should_stop()) {
2009                 for (x = 0; x < GFS2_GL_HASH_SIZE; x++)
2010                         examine_bucket(scan_glock, NULL, x);
2011                 if (freezing(current))
2012                         refrigerator();
2013                 delay = scand_secs;
2014                 if (delay < 1)
2015                         delay = 1;
2016                 schedule_timeout_interruptible(delay * HZ);
2017         }
2018
2019         return 0;
2020 }
2021
2022
2023
2024 int __init gfs2_glock_init(void)
2025 {
2026         unsigned i;
2027         for(i = 0; i < GFS2_GL_HASH_SIZE; i++) {
2028                 INIT_HLIST_HEAD(&gl_hash_table[i].hb_list);
2029         }
2030 #ifdef GL_HASH_LOCK_SZ
2031         for(i = 0; i < GL_HASH_LOCK_SZ; i++) {
2032                 rwlock_init(&gl_hash_locks[i]);
2033         }
2034 #endif
2035
2036         scand_process = kthread_run(gfs2_scand, NULL, "gfs2_scand");
2037         if (IS_ERR(scand_process))
2038                 return PTR_ERR(scand_process);
2039
2040         glock_workqueue = create_workqueue("glock_workqueue");
2041         if (IS_ERR(glock_workqueue)) {
2042                 kthread_stop(scand_process);
2043                 return PTR_ERR(glock_workqueue);
2044         }
2045
2046         return 0;
2047 }
2048
2049 void gfs2_glock_exit(void)
2050 {
2051         destroy_workqueue(glock_workqueue);
2052         kthread_stop(scand_process);
2053 }
2054
2055 module_param(scand_secs, uint, S_IRUGO|S_IWUSR);
2056 MODULE_PARM_DESC(scand_secs, "The number of seconds between scand runs");
2057
2058 static int gfs2_glock_iter_next(struct glock_iter *gi)
2059 {
2060         struct gfs2_glock *gl;
2061
2062 restart:
2063         read_lock(gl_lock_addr(gi->hash));
2064         gl = gi->gl;
2065         if (gl) {
2066                 gi->gl = hlist_entry(gl->gl_list.next,
2067                                      struct gfs2_glock, gl_list);
2068                 if (gi->gl)
2069                         gfs2_glock_hold(gi->gl);
2070         }
2071         read_unlock(gl_lock_addr(gi->hash));
2072         if (gl)
2073                 gfs2_glock_put(gl);
2074         if (gl && gi->gl == NULL)
2075                 gi->hash++;
2076         while(gi->gl == NULL) {
2077                 if (gi->hash >= GFS2_GL_HASH_SIZE)
2078                         return 1;
2079                 read_lock(gl_lock_addr(gi->hash));
2080                 gi->gl = hlist_entry(gl_hash_table[gi->hash].hb_list.first,
2081                                      struct gfs2_glock, gl_list);
2082                 if (gi->gl)
2083                         gfs2_glock_hold(gi->gl);
2084                 read_unlock(gl_lock_addr(gi->hash));
2085                 gi->hash++;
2086         }
2087
2088         if (gi->sdp != gi->gl->gl_sbd)
2089                 goto restart;
2090
2091         return 0;
2092 }
2093
2094 static void gfs2_glock_iter_free(struct glock_iter *gi)
2095 {
2096         if (gi->gl)
2097                 gfs2_glock_put(gi->gl);
2098         kfree(gi);
2099 }
2100
2101 static struct glock_iter *gfs2_glock_iter_init(struct gfs2_sbd *sdp)
2102 {
2103         struct glock_iter *gi;
2104
2105         gi = kmalloc(sizeof (*gi), GFP_KERNEL);
2106         if (!gi)
2107                 return NULL;
2108
2109         gi->sdp = sdp;
2110         gi->hash = 0;
2111         gi->seq = NULL;
2112         gi->gl = NULL;
2113         memset(gi->string, 0, sizeof(gi->string));
2114
2115         if (gfs2_glock_iter_next(gi)) {
2116                 gfs2_glock_iter_free(gi);
2117                 return NULL;
2118         }
2119
2120         return gi;
2121 }
2122
2123 static void *gfs2_glock_seq_start(struct seq_file *file, loff_t *pos)
2124 {
2125         struct glock_iter *gi;
2126         loff_t n = *pos;
2127
2128         gi = gfs2_glock_iter_init(file->private);
2129         if (!gi)
2130                 return NULL;
2131
2132         while(n--) {
2133                 if (gfs2_glock_iter_next(gi)) {
2134                         gfs2_glock_iter_free(gi);
2135                         return NULL;
2136                 }
2137         }
2138
2139         return gi;
2140 }
2141
2142 static void *gfs2_glock_seq_next(struct seq_file *file, void *iter_ptr,
2143                                  loff_t *pos)
2144 {
2145         struct glock_iter *gi = iter_ptr;
2146
2147         (*pos)++;
2148
2149         if (gfs2_glock_iter_next(gi)) {
2150                 gfs2_glock_iter_free(gi);
2151                 return NULL;
2152         }
2153
2154         return gi;
2155 }
2156
2157 static void gfs2_glock_seq_stop(struct seq_file *file, void *iter_ptr)
2158 {
2159         struct glock_iter *gi = iter_ptr;
2160         if (gi)
2161                 gfs2_glock_iter_free(gi);
2162 }
2163
2164 static int gfs2_glock_seq_show(struct seq_file *file, void *iter_ptr)
2165 {
2166         struct glock_iter *gi = iter_ptr;
2167
2168         gi->seq = file;
2169         dump_glock(gi, gi->gl);
2170
2171         return 0;
2172 }
2173
2174 static const struct seq_operations gfs2_glock_seq_ops = {
2175         .start = gfs2_glock_seq_start,
2176         .next  = gfs2_glock_seq_next,
2177         .stop  = gfs2_glock_seq_stop,
2178         .show  = gfs2_glock_seq_show,
2179 };
2180
2181 static int gfs2_debugfs_open(struct inode *inode, struct file *file)
2182 {
2183         struct seq_file *seq;
2184         int ret;
2185
2186         ret = seq_open(file, &gfs2_glock_seq_ops);
2187         if (ret)
2188                 return ret;
2189
2190         seq = file->private_data;
2191         seq->private = inode->i_private;
2192
2193         return 0;
2194 }
2195
2196 static const struct file_operations gfs2_debug_fops = {
2197         .owner   = THIS_MODULE,
2198         .open    = gfs2_debugfs_open,
2199         .read    = seq_read,
2200         .llseek  = seq_lseek,
2201         .release = seq_release
2202 };
2203
2204 int gfs2_create_debugfs_file(struct gfs2_sbd *sdp)
2205 {
2206         sdp->debugfs_dir = debugfs_create_dir(sdp->sd_table_name, gfs2_root);
2207         if (!sdp->debugfs_dir)
2208                 return -ENOMEM;
2209         sdp->debugfs_dentry_glocks = debugfs_create_file("glocks",
2210                                                          S_IFREG | S_IRUGO,
2211                                                          sdp->debugfs_dir, sdp,
2212                                                          &gfs2_debug_fops);
2213         if (!sdp->debugfs_dentry_glocks)
2214                 return -ENOMEM;
2215
2216         return 0;
2217 }
2218
2219 void gfs2_delete_debugfs_file(struct gfs2_sbd *sdp)
2220 {
2221         if (sdp && sdp->debugfs_dir) {
2222                 if (sdp->debugfs_dentry_glocks) {
2223                         debugfs_remove(sdp->debugfs_dentry_glocks);
2224                         sdp->debugfs_dentry_glocks = NULL;
2225                 }
2226                 debugfs_remove(sdp->debugfs_dir);
2227                 sdp->debugfs_dir = NULL;
2228         }
2229 }
2230
2231 int gfs2_register_debugfs(void)
2232 {
2233         gfs2_root = debugfs_create_dir("gfs2", NULL);
2234         return gfs2_root ? 0 : -ENOMEM;
2235 }
2236
2237 void gfs2_unregister_debugfs(void)
2238 {
2239         debugfs_remove(gfs2_root);
2240         gfs2_root = NULL;
2241 }