5fbd9d34ce230632463a9b50942a2c22c88427c6
[pandora-kernel.git] / fs / gfs2 / glock.c
1 /*
2  * Copyright (C) Sistina Software, Inc.  1997-2003 All rights reserved.
3  * Copyright (C) 2004-2006 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 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                 BUG_ON(spin_is_locked(&gl->gl_spin));
221                 gfs2_assert(sdp, gl->gl_state == LM_ST_UNLOCKED);
222                 gfs2_assert(sdp, list_empty(&gl->gl_reclaim));
223                 gfs2_assert(sdp, list_empty(&gl->gl_holders));
224                 gfs2_assert(sdp, list_empty(&gl->gl_waiters1));
225                 gfs2_assert(sdp, list_empty(&gl->gl_waiters3));
226                 glock_free(gl);
227                 rv = 1;
228                 goto out;
229         }
230         write_unlock(gl_lock_addr(gl->gl_hash));
231 out:
232         return rv;
233 }
234
235 /**
236  * search_bucket() - Find struct gfs2_glock by lock number
237  * @bucket: the bucket to search
238  * @name: The lock name
239  *
240  * Returns: NULL, or the struct gfs2_glock with the requested number
241  */
242
243 static struct gfs2_glock *search_bucket(unsigned int hash,
244                                         const struct gfs2_sbd *sdp,
245                                         const struct lm_lockname *name)
246 {
247         struct gfs2_glock *gl;
248         struct hlist_node *h;
249
250         hlist_for_each_entry(gl, h, &gl_hash_table[hash].hb_list, gl_list) {
251                 if (!lm_name_equal(&gl->gl_name, name))
252                         continue;
253                 if (gl->gl_sbd != sdp)
254                         continue;
255
256                 atomic_inc(&gl->gl_ref);
257
258                 return gl;
259         }
260
261         return NULL;
262 }
263
264 /**
265  * gfs2_glock_find() - Find glock by lock number
266  * @sdp: The GFS2 superblock
267  * @name: The lock name
268  *
269  * Returns: NULL, or the struct gfs2_glock with the requested number
270  */
271
272 static struct gfs2_glock *gfs2_glock_find(const struct gfs2_sbd *sdp,
273                                           const struct lm_lockname *name)
274 {
275         unsigned int hash = gl_hash(sdp, name);
276         struct gfs2_glock *gl;
277
278         read_lock(gl_lock_addr(hash));
279         gl = search_bucket(hash, sdp, name);
280         read_unlock(gl_lock_addr(hash));
281
282         return gl;
283 }
284
285 static void glock_work_func(struct work_struct *work)
286 {
287         struct gfs2_glock *gl = container_of(work, struct gfs2_glock, gl_work.work);
288
289         spin_lock(&gl->gl_spin);
290         if (test_and_clear_bit(GLF_PENDING_DEMOTE, &gl->gl_flags))
291                 set_bit(GLF_DEMOTE, &gl->gl_flags);
292         run_queue(gl);
293         spin_unlock(&gl->gl_spin);
294         gfs2_glock_put(gl);
295 }
296
297 /**
298  * gfs2_glock_get() - Get a glock, or create one if one doesn't exist
299  * @sdp: The GFS2 superblock
300  * @number: the lock number
301  * @glops: The glock_operations to use
302  * @create: If 0, don't create the glock if it doesn't exist
303  * @glp: the glock is returned here
304  *
305  * This does not lock a glock, just finds/creates structures for one.
306  *
307  * Returns: errno
308  */
309
310 int gfs2_glock_get(struct gfs2_sbd *sdp, u64 number,
311                    const struct gfs2_glock_operations *glops, int create,
312                    struct gfs2_glock **glp)
313 {
314         struct lm_lockname name = { .ln_number = number, .ln_type = glops->go_type };
315         struct gfs2_glock *gl, *tmp;
316         unsigned int hash = gl_hash(sdp, &name);
317         int error;
318
319         read_lock(gl_lock_addr(hash));
320         gl = search_bucket(hash, sdp, &name);
321         read_unlock(gl_lock_addr(hash));
322
323         if (gl || !create) {
324                 *glp = gl;
325                 return 0;
326         }
327
328         gl = kmem_cache_alloc(gfs2_glock_cachep, GFP_KERNEL);
329         if (!gl)
330                 return -ENOMEM;
331
332         gl->gl_flags = 0;
333         gl->gl_name = name;
334         atomic_set(&gl->gl_ref, 1);
335         gl->gl_state = LM_ST_UNLOCKED;
336         gl->gl_demote_state = LM_ST_EXCLUSIVE;
337         gl->gl_hash = hash;
338         gl->gl_owner_pid = 0;
339         gl->gl_ip = 0;
340         gl->gl_ops = glops;
341         gl->gl_req_gh = NULL;
342         gl->gl_req_bh = NULL;
343         gl->gl_vn = 0;
344         gl->gl_stamp = jiffies;
345         gl->gl_tchange = jiffies;
346         gl->gl_object = NULL;
347         gl->gl_sbd = sdp;
348         gl->gl_aspace = NULL;
349         lops_init_le(&gl->gl_le, &gfs2_glock_lops);
350         INIT_DELAYED_WORK(&gl->gl_work, glock_work_func);
351
352         /* If this glock protects actual on-disk data or metadata blocks,
353            create a VFS inode to manage the pages/buffers holding them. */
354         if (glops == &gfs2_inode_glops || glops == &gfs2_rgrp_glops) {
355                 gl->gl_aspace = gfs2_aspace_get(sdp);
356                 if (!gl->gl_aspace) {
357                         error = -ENOMEM;
358                         goto fail;
359                 }
360         }
361
362         error = gfs2_lm_get_lock(sdp, &name, &gl->gl_lock);
363         if (error)
364                 goto fail_aspace;
365
366         write_lock(gl_lock_addr(hash));
367         tmp = search_bucket(hash, sdp, &name);
368         if (tmp) {
369                 write_unlock(gl_lock_addr(hash));
370                 glock_free(gl);
371                 gl = tmp;
372         } else {
373                 hlist_add_head(&gl->gl_list, &gl_hash_table[hash].hb_list);
374                 write_unlock(gl_lock_addr(hash));
375         }
376
377         *glp = gl;
378
379         return 0;
380
381 fail_aspace:
382         if (gl->gl_aspace)
383                 gfs2_aspace_put(gl->gl_aspace);
384 fail:
385         kmem_cache_free(gfs2_glock_cachep, gl);
386         return error;
387 }
388
389 /**
390  * gfs2_holder_init - initialize a struct gfs2_holder in the default way
391  * @gl: the glock
392  * @state: the state we're requesting
393  * @flags: the modifier flags
394  * @gh: the holder structure
395  *
396  */
397
398 void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, unsigned flags,
399                       struct gfs2_holder *gh)
400 {
401         INIT_LIST_HEAD(&gh->gh_list);
402         gh->gh_gl = gl;
403         gh->gh_ip = (unsigned long)__builtin_return_address(0);
404         gh->gh_owner_pid = current->pid;
405         gh->gh_state = state;
406         gh->gh_flags = flags;
407         gh->gh_error = 0;
408         gh->gh_iflags = 0;
409         gfs2_glock_hold(gl);
410 }
411
412 /**
413  * gfs2_holder_reinit - reinitialize a struct gfs2_holder so we can requeue it
414  * @state: the state we're requesting
415  * @flags: the modifier flags
416  * @gh: the holder structure
417  *
418  * Don't mess with the glock.
419  *
420  */
421
422 void gfs2_holder_reinit(unsigned int state, unsigned flags, struct gfs2_holder *gh)
423 {
424         gh->gh_state = state;
425         gh->gh_flags = flags;
426         gh->gh_iflags = 0;
427         gh->gh_ip = (unsigned long)__builtin_return_address(0);
428 }
429
430 /**
431  * gfs2_holder_uninit - uninitialize a holder structure (drop glock reference)
432  * @gh: the holder structure
433  *
434  */
435
436 void gfs2_holder_uninit(struct gfs2_holder *gh)
437 {
438         gfs2_glock_put(gh->gh_gl);
439         gh->gh_gl = NULL;
440         gh->gh_ip = 0;
441 }
442
443 static void gfs2_holder_wake(struct gfs2_holder *gh)
444 {
445         clear_bit(HIF_WAIT, &gh->gh_iflags);
446         smp_mb__after_clear_bit();
447         wake_up_bit(&gh->gh_iflags, HIF_WAIT);
448 }
449
450 static int just_schedule(void *word)
451 {
452         schedule();
453         return 0;
454 }
455
456 static void wait_on_holder(struct gfs2_holder *gh)
457 {
458         might_sleep();
459         wait_on_bit(&gh->gh_iflags, HIF_WAIT, just_schedule, TASK_UNINTERRUPTIBLE);
460 }
461
462 static void gfs2_demote_wake(struct gfs2_glock *gl)
463 {
464         BUG_ON(!spin_is_locked(&gl->gl_spin));
465         gl->gl_demote_state = LM_ST_EXCLUSIVE;
466         clear_bit(GLF_DEMOTE, &gl->gl_flags);
467         smp_mb__after_clear_bit();
468         wake_up_bit(&gl->gl_flags, GLF_DEMOTE);
469 }
470
471 static void wait_on_demote(struct gfs2_glock *gl)
472 {
473         might_sleep();
474         wait_on_bit(&gl->gl_flags, GLF_DEMOTE, just_schedule, TASK_UNINTERRUPTIBLE);
475 }
476
477 /**
478  * rq_mutex - process a mutex request in the queue
479  * @gh: the glock holder
480  *
481  * Returns: 1 if the queue is blocked
482  */
483
484 static int rq_mutex(struct gfs2_holder *gh)
485 {
486         struct gfs2_glock *gl = gh->gh_gl;
487
488         list_del_init(&gh->gh_list);
489         /*  gh->gh_error never examined.  */
490         set_bit(GLF_LOCK, &gl->gl_flags);
491         clear_bit(HIF_WAIT, &gh->gh_iflags);
492         smp_mb();
493         wake_up_bit(&gh->gh_iflags, HIF_WAIT);
494
495         return 1;
496 }
497
498 /**
499  * rq_promote - process a promote request in the queue
500  * @gh: the glock holder
501  *
502  * Acquire a new inter-node lock, or change a lock state to more restrictive.
503  *
504  * Returns: 1 if the queue is blocked
505  */
506
507 static int rq_promote(struct gfs2_holder *gh)
508 {
509         struct gfs2_glock *gl = gh->gh_gl;
510
511         if (!relaxed_state_ok(gl->gl_state, gh->gh_state, gh->gh_flags)) {
512                 if (list_empty(&gl->gl_holders)) {
513                         gl->gl_req_gh = gh;
514                         set_bit(GLF_LOCK, &gl->gl_flags);
515                         spin_unlock(&gl->gl_spin);
516                         gfs2_glock_xmote_th(gh->gh_gl, gh);
517                         spin_lock(&gl->gl_spin);
518                 }
519                 return 1;
520         }
521
522         if (list_empty(&gl->gl_holders)) {
523                 set_bit(HIF_FIRST, &gh->gh_iflags);
524                 set_bit(GLF_LOCK, &gl->gl_flags);
525         } else {
526                 struct gfs2_holder *next_gh;
527                 if (gh->gh_state == LM_ST_EXCLUSIVE)
528                         return 1;
529                 next_gh = list_entry(gl->gl_holders.next, struct gfs2_holder,
530                                      gh_list);
531                 if (next_gh->gh_state == LM_ST_EXCLUSIVE)
532                          return 1;
533         }
534
535         list_move_tail(&gh->gh_list, &gl->gl_holders);
536         gh->gh_error = 0;
537         set_bit(HIF_HOLDER, &gh->gh_iflags);
538
539         gfs2_holder_wake(gh);
540
541         return 0;
542 }
543
544 /**
545  * rq_demote - process a demote request in the queue
546  * @gh: the glock holder
547  *
548  * Returns: 1 if the queue is blocked
549  */
550
551 static int rq_demote(struct gfs2_glock *gl)
552 {
553         if (!list_empty(&gl->gl_holders))
554                 return 1;
555
556         if (gl->gl_state == gl->gl_demote_state ||
557             gl->gl_state == LM_ST_UNLOCKED) {
558                 gfs2_demote_wake(gl);
559                 return 0;
560         }
561
562         set_bit(GLF_LOCK, &gl->gl_flags);
563         set_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags);
564
565         if (gl->gl_demote_state == LM_ST_UNLOCKED ||
566             gl->gl_state != LM_ST_EXCLUSIVE) {
567                 spin_unlock(&gl->gl_spin);
568                 gfs2_glock_drop_th(gl);
569         } else {
570                 spin_unlock(&gl->gl_spin);
571                 gfs2_glock_xmote_th(gl, NULL);
572         }
573
574         spin_lock(&gl->gl_spin);
575         clear_bit(GLF_DEMOTE_IN_PROGRESS, &gl->gl_flags);
576
577         return 0;
578 }
579
580 /**
581  * run_queue - process holder structures on a glock
582  * @gl: the glock
583  *
584  */
585 static void run_queue(struct gfs2_glock *gl)
586 {
587         struct gfs2_holder *gh;
588         int blocked = 1;
589
590         for (;;) {
591                 if (test_bit(GLF_LOCK, &gl->gl_flags))
592                         break;
593
594                 if (!list_empty(&gl->gl_waiters1)) {
595                         gh = list_entry(gl->gl_waiters1.next,
596                                         struct gfs2_holder, gh_list);
597                         blocked = rq_mutex(gh);
598                 } else if (test_bit(GLF_DEMOTE, &gl->gl_flags)) {
599                         blocked = rq_demote(gl);
600                         if (gl->gl_waiters2 && !blocked) {
601                                 set_bit(GLF_DEMOTE, &gl->gl_flags);
602                                 gl->gl_demote_state = LM_ST_UNLOCKED;
603                         }
604                         gl->gl_waiters2 = 0;
605                 } else if (!list_empty(&gl->gl_waiters3)) {
606                         gh = list_entry(gl->gl_waiters3.next,
607                                         struct gfs2_holder, gh_list);
608                         blocked = rq_promote(gh);
609                 } else
610                         break;
611
612                 if (blocked)
613                         break;
614         }
615 }
616
617 /**
618  * gfs2_glmutex_lock - acquire a local lock on a glock
619  * @gl: the glock
620  *
621  * Gives caller exclusive access to manipulate a glock structure.
622  */
623
624 static void gfs2_glmutex_lock(struct gfs2_glock *gl)
625 {
626         struct gfs2_holder gh;
627
628         gfs2_holder_init(gl, 0, 0, &gh);
629         if (test_and_set_bit(HIF_WAIT, &gh.gh_iflags))
630                 BUG();
631
632         spin_lock(&gl->gl_spin);
633         if (test_and_set_bit(GLF_LOCK, &gl->gl_flags)) {
634                 list_add_tail(&gh.gh_list, &gl->gl_waiters1);
635         } else {
636                 gl->gl_owner_pid = current->pid;
637                 gl->gl_ip = (unsigned long)__builtin_return_address(0);
638                 clear_bit(HIF_WAIT, &gh.gh_iflags);
639                 smp_mb();
640                 wake_up_bit(&gh.gh_iflags, HIF_WAIT);
641         }
642         spin_unlock(&gl->gl_spin);
643
644         wait_on_holder(&gh);
645         gfs2_holder_uninit(&gh);
646 }
647
648 /**
649  * gfs2_glmutex_trylock - try to acquire a local lock on a glock
650  * @gl: the glock
651  *
652  * Returns: 1 if the glock is acquired
653  */
654
655 static int gfs2_glmutex_trylock(struct gfs2_glock *gl)
656 {
657         int acquired = 1;
658
659         spin_lock(&gl->gl_spin);
660         if (test_and_set_bit(GLF_LOCK, &gl->gl_flags)) {
661                 acquired = 0;
662         } else {
663                 gl->gl_owner_pid = current->pid;
664                 gl->gl_ip = (unsigned long)__builtin_return_address(0);
665         }
666         spin_unlock(&gl->gl_spin);
667
668         return acquired;
669 }
670
671 /**
672  * gfs2_glmutex_unlock - release a local lock on a glock
673  * @gl: the glock
674  *
675  */
676
677 static void gfs2_glmutex_unlock(struct gfs2_glock *gl)
678 {
679         spin_lock(&gl->gl_spin);
680         clear_bit(GLF_LOCK, &gl->gl_flags);
681         gl->gl_owner_pid = 0;
682         gl->gl_ip = 0;
683         run_queue(gl);
684         BUG_ON(!spin_is_locked(&gl->gl_spin));
685         spin_unlock(&gl->gl_spin);
686 }
687
688 /**
689  * handle_callback - process a demote request
690  * @gl: the glock
691  * @state: the state the caller wants us to change to
692  *
693  * There are only two requests that we are going to see in actual
694  * practise: LM_ST_SHARED and LM_ST_UNLOCKED
695  */
696
697 static void handle_callback(struct gfs2_glock *gl, unsigned int state,
698                             int remote, unsigned long delay)
699 {
700         int bit = delay ? GLF_PENDING_DEMOTE : GLF_DEMOTE;
701
702         spin_lock(&gl->gl_spin);
703         set_bit(bit, &gl->gl_flags);
704         if (gl->gl_demote_state == LM_ST_EXCLUSIVE) {
705                 gl->gl_demote_state = state;
706                 gl->gl_demote_time = jiffies;
707                 if (remote && gl->gl_ops->go_type == LM_TYPE_IOPEN &&
708                     gl->gl_object) {
709                         gfs2_glock_schedule_for_reclaim(gl);
710                         spin_unlock(&gl->gl_spin);
711                         return;
712                 }
713         } else if (gl->gl_demote_state != LM_ST_UNLOCKED &&
714                         gl->gl_demote_state != state) {
715                 if (test_bit(GLF_DEMOTE_IN_PROGRESS,  &gl->gl_flags)) 
716                         gl->gl_waiters2 = 1;
717                 else 
718                         gl->gl_demote_state = LM_ST_UNLOCKED;
719         }
720         spin_unlock(&gl->gl_spin);
721 }
722
723 /**
724  * state_change - record that the glock is now in a different state
725  * @gl: the glock
726  * @new_state the new state
727  *
728  */
729
730 static void state_change(struct gfs2_glock *gl, unsigned int new_state)
731 {
732         int held1, held2;
733
734         held1 = (gl->gl_state != LM_ST_UNLOCKED);
735         held2 = (new_state != LM_ST_UNLOCKED);
736
737         if (held1 != held2) {
738                 if (held2)
739                         gfs2_glock_hold(gl);
740                 else
741                         gfs2_glock_put(gl);
742         }
743
744         gl->gl_state = new_state;
745         gl->gl_tchange = jiffies;
746 }
747
748 /**
749  * xmote_bh - Called after the lock module is done acquiring a lock
750  * @gl: The glock in question
751  * @ret: the int returned from the lock module
752  *
753  */
754
755 static void xmote_bh(struct gfs2_glock *gl, unsigned int ret)
756 {
757         struct gfs2_sbd *sdp = gl->gl_sbd;
758         const struct gfs2_glock_operations *glops = gl->gl_ops;
759         struct gfs2_holder *gh = gl->gl_req_gh;
760         int prev_state = gl->gl_state;
761         int op_done = 1;
762
763         gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags));
764         gfs2_assert_warn(sdp, list_empty(&gl->gl_holders));
765         gfs2_assert_warn(sdp, !(ret & LM_OUT_ASYNC));
766
767         state_change(gl, ret & LM_OUT_ST_MASK);
768
769         if (prev_state != LM_ST_UNLOCKED && !(ret & LM_OUT_CACHEABLE)) {
770                 if (glops->go_inval)
771                         glops->go_inval(gl, DIO_METADATA);
772         } else if (gl->gl_state == LM_ST_DEFERRED) {
773                 /* We might not want to do this here.
774                    Look at moving to the inode glops. */
775                 if (glops->go_inval)
776                         glops->go_inval(gl, 0);
777         }
778
779         /*  Deal with each possible exit condition  */
780
781         if (!gh) {
782                 gl->gl_stamp = jiffies;
783                 if (ret & LM_OUT_CANCELED) {
784                         op_done = 0;
785                 } else {
786                         spin_lock(&gl->gl_spin);
787                         if (gl->gl_state != gl->gl_demote_state) {
788                                 gl->gl_req_bh = NULL;
789                                 spin_unlock(&gl->gl_spin);
790                                 gfs2_glock_drop_th(gl);
791                                 gfs2_glock_put(gl);
792                                 return;
793                         }
794                         gfs2_demote_wake(gl);
795                         spin_unlock(&gl->gl_spin);
796                 }
797         } else {
798                 spin_lock(&gl->gl_spin);
799                 list_del_init(&gh->gh_list);
800                 gh->gh_error = -EIO;
801                 if (unlikely(test_bit(SDF_SHUTDOWN, &sdp->sd_flags))) 
802                         goto out;
803                 gh->gh_error = GLR_CANCELED;
804                 if (ret & LM_OUT_CANCELED) 
805                         goto out;
806                 if (relaxed_state_ok(gl->gl_state, gh->gh_state, gh->gh_flags)) {
807                         list_add_tail(&gh->gh_list, &gl->gl_holders);
808                         gh->gh_error = 0;
809                         set_bit(HIF_HOLDER, &gh->gh_iflags);
810                         set_bit(HIF_FIRST, &gh->gh_iflags);
811                         op_done = 0;
812                         goto out;
813                 }
814                 gh->gh_error = GLR_TRYFAILED;
815                 if (gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB))
816                         goto out;
817                 gh->gh_error = -EINVAL;
818                 if (gfs2_assert_withdraw(sdp, 0) == -1)
819                         fs_err(sdp, "ret = 0x%.8X\n", ret);
820 out:
821                 spin_unlock(&gl->gl_spin);
822         }
823
824         if (glops->go_xmote_bh)
825                 glops->go_xmote_bh(gl);
826
827         if (op_done) {
828                 spin_lock(&gl->gl_spin);
829                 gl->gl_req_gh = NULL;
830                 gl->gl_req_bh = NULL;
831                 clear_bit(GLF_LOCK, &gl->gl_flags);
832                 spin_unlock(&gl->gl_spin);
833         }
834
835         gfs2_glock_put(gl);
836
837         if (gh)
838                 gfs2_holder_wake(gh);
839 }
840
841 /**
842  * gfs2_glock_xmote_th - Call into the lock module to acquire or change a glock
843  * @gl: The glock in question
844  * @state: the requested state
845  * @flags: modifier flags to the lock call
846  *
847  */
848
849 static void gfs2_glock_xmote_th(struct gfs2_glock *gl, struct gfs2_holder *gh)
850 {
851         struct gfs2_sbd *sdp = gl->gl_sbd;
852         int flags = gh ? gh->gh_flags : 0;
853         unsigned state = gh ? gh->gh_state : gl->gl_demote_state;
854         const struct gfs2_glock_operations *glops = gl->gl_ops;
855         int lck_flags = flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB |
856                                  LM_FLAG_NOEXP | LM_FLAG_ANY |
857                                  LM_FLAG_PRIORITY);
858         unsigned int lck_ret;
859
860         if (glops->go_xmote_th)
861                 glops->go_xmote_th(gl);
862
863         gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags));
864         gfs2_assert_warn(sdp, list_empty(&gl->gl_holders));
865         gfs2_assert_warn(sdp, state != LM_ST_UNLOCKED);
866         gfs2_assert_warn(sdp, state != gl->gl_state);
867
868         gfs2_glock_hold(gl);
869         gl->gl_req_bh = xmote_bh;
870
871         lck_ret = gfs2_lm_lock(sdp, gl->gl_lock, gl->gl_state, state, lck_flags);
872
873         if (gfs2_assert_withdraw(sdp, !(lck_ret & LM_OUT_ERROR)))
874                 return;
875
876         if (lck_ret & LM_OUT_ASYNC)
877                 gfs2_assert_warn(sdp, lck_ret == LM_OUT_ASYNC);
878         else
879                 xmote_bh(gl, lck_ret);
880 }
881
882 /**
883  * drop_bh - Called after a lock module unlock completes
884  * @gl: the glock
885  * @ret: the return status
886  *
887  * Doesn't wake up the process waiting on the struct gfs2_holder (if any)
888  * Doesn't drop the reference on the glock the top half took out
889  *
890  */
891
892 static void drop_bh(struct gfs2_glock *gl, unsigned int ret)
893 {
894         struct gfs2_sbd *sdp = gl->gl_sbd;
895         const struct gfs2_glock_operations *glops = gl->gl_ops;
896         struct gfs2_holder *gh = gl->gl_req_gh;
897
898         gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags));
899         gfs2_assert_warn(sdp, list_empty(&gl->gl_holders));
900         gfs2_assert_warn(sdp, !ret);
901
902         state_change(gl, LM_ST_UNLOCKED);
903
904         if (glops->go_inval)
905                 glops->go_inval(gl, DIO_METADATA);
906
907         if (gh) {
908                 spin_lock(&gl->gl_spin);
909                 list_del_init(&gh->gh_list);
910                 gh->gh_error = 0;
911                 spin_unlock(&gl->gl_spin);
912         }
913
914         spin_lock(&gl->gl_spin);
915         gfs2_demote_wake(gl);
916         gl->gl_req_gh = NULL;
917         gl->gl_req_bh = NULL;
918         clear_bit(GLF_LOCK, &gl->gl_flags);
919         spin_unlock(&gl->gl_spin);
920
921         gfs2_glock_put(gl);
922
923         if (gh)
924                 gfs2_holder_wake(gh);
925 }
926
927 /**
928  * gfs2_glock_drop_th - call into the lock module to unlock a lock
929  * @gl: the glock
930  *
931  */
932
933 static void gfs2_glock_drop_th(struct gfs2_glock *gl)
934 {
935         struct gfs2_sbd *sdp = gl->gl_sbd;
936         const struct gfs2_glock_operations *glops = gl->gl_ops;
937         unsigned int ret;
938
939         if (glops->go_xmote_th)
940                 glops->go_xmote_th(gl);
941
942         gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags));
943         gfs2_assert_warn(sdp, list_empty(&gl->gl_holders));
944         gfs2_assert_warn(sdp, gl->gl_state != LM_ST_UNLOCKED);
945
946         gfs2_glock_hold(gl);
947         gl->gl_req_bh = drop_bh;
948
949         ret = gfs2_lm_unlock(sdp, gl->gl_lock, gl->gl_state);
950
951         if (gfs2_assert_withdraw(sdp, !(ret & LM_OUT_ERROR)))
952                 return;
953
954         if (!ret)
955                 drop_bh(gl, ret);
956         else
957                 gfs2_assert_warn(sdp, ret == LM_OUT_ASYNC);
958 }
959
960 /**
961  * do_cancels - cancel requests for locks stuck waiting on an expire flag
962  * @gh: the LM_FLAG_PRIORITY holder waiting to acquire the lock
963  *
964  * Don't cancel GL_NOCANCEL requests.
965  */
966
967 static void do_cancels(struct gfs2_holder *gh)
968 {
969         struct gfs2_glock *gl = gh->gh_gl;
970
971         spin_lock(&gl->gl_spin);
972
973         while (gl->gl_req_gh != gh &&
974                !test_bit(HIF_HOLDER, &gh->gh_iflags) &&
975                !list_empty(&gh->gh_list)) {
976                 if (gl->gl_req_bh && !(gl->gl_req_gh &&
977                                      (gl->gl_req_gh->gh_flags & GL_NOCANCEL))) {
978                         spin_unlock(&gl->gl_spin);
979                         gfs2_lm_cancel(gl->gl_sbd, gl->gl_lock);
980                         msleep(100);
981                         spin_lock(&gl->gl_spin);
982                 } else {
983                         spin_unlock(&gl->gl_spin);
984                         msleep(100);
985                         spin_lock(&gl->gl_spin);
986                 }
987         }
988
989         spin_unlock(&gl->gl_spin);
990 }
991
992 /**
993  * glock_wait_internal - wait on a glock acquisition
994  * @gh: the glock holder
995  *
996  * Returns: 0 on success
997  */
998
999 static int glock_wait_internal(struct gfs2_holder *gh)
1000 {
1001         struct gfs2_glock *gl = gh->gh_gl;
1002         struct gfs2_sbd *sdp = gl->gl_sbd;
1003         const struct gfs2_glock_operations *glops = gl->gl_ops;
1004
1005         if (test_bit(HIF_ABORTED, &gh->gh_iflags))
1006                 return -EIO;
1007
1008         if (gh->gh_flags & (LM_FLAG_TRY | LM_FLAG_TRY_1CB)) {
1009                 spin_lock(&gl->gl_spin);
1010                 if (gl->gl_req_gh != gh &&
1011                     !test_bit(HIF_HOLDER, &gh->gh_iflags) &&
1012                     !list_empty(&gh->gh_list)) {
1013                         list_del_init(&gh->gh_list);
1014                         gh->gh_error = GLR_TRYFAILED;
1015                         run_queue(gl);
1016                         spin_unlock(&gl->gl_spin);
1017                         return gh->gh_error;
1018                 }
1019                 spin_unlock(&gl->gl_spin);
1020         }
1021
1022         if (gh->gh_flags & LM_FLAG_PRIORITY)
1023                 do_cancels(gh);
1024
1025         wait_on_holder(gh);
1026         if (gh->gh_error)
1027                 return gh->gh_error;
1028
1029         gfs2_assert_withdraw(sdp, test_bit(HIF_HOLDER, &gh->gh_iflags));
1030         gfs2_assert_withdraw(sdp, relaxed_state_ok(gl->gl_state, gh->gh_state,
1031                                                    gh->gh_flags));
1032
1033         if (test_bit(HIF_FIRST, &gh->gh_iflags)) {
1034                 gfs2_assert_warn(sdp, test_bit(GLF_LOCK, &gl->gl_flags));
1035
1036                 if (glops->go_lock) {
1037                         gh->gh_error = glops->go_lock(gh);
1038                         if (gh->gh_error) {
1039                                 spin_lock(&gl->gl_spin);
1040                                 list_del_init(&gh->gh_list);
1041                                 spin_unlock(&gl->gl_spin);
1042                         }
1043                 }
1044
1045                 spin_lock(&gl->gl_spin);
1046                 gl->gl_req_gh = NULL;
1047                 gl->gl_req_bh = NULL;
1048                 clear_bit(GLF_LOCK, &gl->gl_flags);
1049                 run_queue(gl);
1050                 spin_unlock(&gl->gl_spin);
1051         }
1052
1053         return gh->gh_error;
1054 }
1055
1056 static inline struct gfs2_holder *
1057 find_holder_by_owner(struct list_head *head, pid_t pid)
1058 {
1059         struct gfs2_holder *gh;
1060
1061         list_for_each_entry(gh, head, gh_list) {
1062                 if (gh->gh_owner_pid == pid)
1063                         return gh;
1064         }
1065
1066         return NULL;
1067 }
1068
1069 static void print_dbg(struct glock_iter *gi, const char *fmt, ...)
1070 {
1071         va_list args;
1072
1073         va_start(args, fmt);
1074         if (gi) {
1075                 vsprintf(gi->string, fmt, args);
1076                 seq_printf(gi->seq, gi->string);
1077         }
1078         else
1079                 vprintk(fmt, args);
1080         va_end(args);
1081 }
1082
1083 /**
1084  * add_to_queue - Add a holder to the wait queue (but look for recursion)
1085  * @gh: the holder structure to add
1086  *
1087  */
1088
1089 static void add_to_queue(struct gfs2_holder *gh)
1090 {
1091         struct gfs2_glock *gl = gh->gh_gl;
1092         struct gfs2_holder *existing;
1093
1094         BUG_ON(!gh->gh_owner_pid);
1095         if (test_and_set_bit(HIF_WAIT, &gh->gh_iflags))
1096                 BUG();
1097
1098         if (!(gh->gh_flags & GL_FLOCK)) {
1099                 existing = find_holder_by_owner(&gl->gl_holders, 
1100                                                 gh->gh_owner_pid);
1101                 if (existing) {
1102                         print_symbol(KERN_WARNING "original: %s\n", 
1103                                      existing->gh_ip);
1104                         printk(KERN_INFO "pid : %d\n", existing->gh_owner_pid);
1105                         printk(KERN_INFO "lock type : %d lock state : %d\n",
1106                                existing->gh_gl->gl_name.ln_type, 
1107                                existing->gh_gl->gl_state);
1108                         print_symbol(KERN_WARNING "new: %s\n", gh->gh_ip);
1109                         printk(KERN_INFO "pid : %d\n", 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         }
1599         spin_unlock(&sdp->sd_reclaim_lock);
1600
1601         wake_up(&sdp->sd_reclaim_wq);
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 ", (long)gh->gh_owner_pid);
1811                 gh_owner = find_task_by_pid(gh->gh_owner_pid);
1812                 if (gh_owner)
1813                         print_dbg(gi, "(%s)\n", gh_owner->comm);
1814                 else
1815                         print_dbg(gi, "(ended)\n");
1816         } else
1817                 print_dbg(gi, "    owner = -1\n");
1818         print_dbg(gi, "    gh_state = %u\n", gh->gh_state);
1819         print_dbg(gi, "    gh_flags =");
1820         for (x = 0; x < 32; x++)
1821                 if (gh->gh_flags & (1 << x))
1822                         print_dbg(gi, " %u", x);
1823         print_dbg(gi, " \n");
1824         print_dbg(gi, "    error = %d\n", gh->gh_error);
1825         print_dbg(gi, "    gh_iflags =");
1826         for (x = 0; x < 32; x++)
1827                 if (test_bit(x, &gh->gh_iflags))
1828                         print_dbg(gi, " %u", x);
1829         print_dbg(gi, " \n");
1830         gfs2_print_symbol(gi, "    initialized at: %s\n", gh->gh_ip);
1831
1832         return 0;
1833 }
1834
1835 /**
1836  * dump_inode - print information about an inode
1837  * @ip: the inode
1838  *
1839  * Returns: 0 on success, -ENOBUFS when we run out of space
1840  */
1841
1842 static int dump_inode(struct glock_iter *gi, struct gfs2_inode *ip)
1843 {
1844         unsigned int x;
1845
1846         print_dbg(gi, "  Inode:\n");
1847         print_dbg(gi, "    num = %llu/%llu\n",
1848                   (unsigned long long)ip->i_no_formal_ino,
1849                   (unsigned long long)ip->i_no_addr);
1850         print_dbg(gi, "    type = %u\n", IF2DT(ip->i_inode.i_mode));
1851         print_dbg(gi, "    i_flags =");
1852         for (x = 0; x < 32; x++)
1853                 if (test_bit(x, &ip->i_flags))
1854                         print_dbg(gi, " %u", x);
1855         print_dbg(gi, " \n");
1856         return 0;
1857 }
1858
1859 /**
1860  * dump_glock - print information about a glock
1861  * @gl: the glock
1862  * @count: where we are in the buffer
1863  *
1864  * Returns: 0 on success, -ENOBUFS when we run out of space
1865  */
1866
1867 static int dump_glock(struct glock_iter *gi, struct gfs2_glock *gl)
1868 {
1869         struct gfs2_holder *gh;
1870         unsigned int x;
1871         int error = -ENOBUFS;
1872         struct task_struct *gl_owner;
1873
1874         spin_lock(&gl->gl_spin);
1875
1876         print_dbg(gi, "Glock 0x%p (%u, 0x%llx)\n", gl, gl->gl_name.ln_type,
1877                    (unsigned long long)gl->gl_name.ln_number);
1878         print_dbg(gi, "  gl_flags =");
1879         for (x = 0; x < 32; x++) {
1880                 if (test_bit(x, &gl->gl_flags))
1881                         print_dbg(gi, " %u", x);
1882         }
1883         if (!test_bit(GLF_LOCK, &gl->gl_flags))
1884                 print_dbg(gi, " (unlocked)");
1885         print_dbg(gi, " \n");
1886         print_dbg(gi, "  gl_ref = %d\n", atomic_read(&gl->gl_ref));
1887         print_dbg(gi, "  gl_state = %u\n", gl->gl_state);
1888         if (gl->gl_owner_pid) {
1889                 gl_owner = find_task_by_pid(gl->gl_owner_pid);
1890                 if (gl_owner)
1891                         print_dbg(gi, "  gl_owner = pid %d (%s)\n",
1892                                   gl->gl_owner_pid, gl_owner->comm);
1893                 else
1894                         print_dbg(gi, "  gl_owner = %d (ended)\n",
1895                                   gl->gl_owner_pid);
1896         } else
1897                 print_dbg(gi, "  gl_owner = -1\n");
1898         print_dbg(gi, "  gl_ip = %lu\n", gl->gl_ip);
1899         print_dbg(gi, "  req_gh = %s\n", (gl->gl_req_gh) ? "yes" : "no");
1900         print_dbg(gi, "  req_bh = %s\n", (gl->gl_req_bh) ? "yes" : "no");
1901         print_dbg(gi, "  lvb_count = %d\n", atomic_read(&gl->gl_lvb_count));
1902         print_dbg(gi, "  object = %s\n", (gl->gl_object) ? "yes" : "no");
1903         print_dbg(gi, "  le = %s\n",
1904                    (list_empty(&gl->gl_le.le_list)) ? "no" : "yes");
1905         print_dbg(gi, "  reclaim = %s\n",
1906                    (list_empty(&gl->gl_reclaim)) ? "no" : "yes");
1907         if (gl->gl_aspace)
1908                 print_dbg(gi, "  aspace = 0x%p nrpages = %lu\n", gl->gl_aspace,
1909                            gl->gl_aspace->i_mapping->nrpages);
1910         else
1911                 print_dbg(gi, "  aspace = no\n");
1912         print_dbg(gi, "  ail = %d\n", atomic_read(&gl->gl_ail_count));
1913         if (gl->gl_req_gh) {
1914                 error = dump_holder(gi, "Request", gl->gl_req_gh);
1915                 if (error)
1916                         goto out;
1917         }
1918         list_for_each_entry(gh, &gl->gl_holders, gh_list) {
1919                 error = dump_holder(gi, "Holder", gh);
1920                 if (error)
1921                         goto out;
1922         }
1923         list_for_each_entry(gh, &gl->gl_waiters1, gh_list) {
1924                 error = dump_holder(gi, "Waiter1", gh);
1925                 if (error)
1926                         goto out;
1927         }
1928         list_for_each_entry(gh, &gl->gl_waiters3, gh_list) {
1929                 error = dump_holder(gi, "Waiter3", gh);
1930                 if (error)
1931                         goto out;
1932         }
1933         if (test_bit(GLF_DEMOTE, &gl->gl_flags)) {
1934                 print_dbg(gi, "  Demotion req to state %u (%llu uS ago)\n",
1935                           gl->gl_demote_state, (unsigned long long)
1936                           (jiffies - gl->gl_demote_time)*(1000000/HZ));
1937         }
1938         if (gl->gl_ops == &gfs2_inode_glops && gl->gl_object) {
1939                 if (!test_bit(GLF_LOCK, &gl->gl_flags) &&
1940                         list_empty(&gl->gl_holders)) {
1941                         error = dump_inode(gi, gl->gl_object);
1942                         if (error)
1943                                 goto out;
1944                 } else {
1945                         error = -ENOBUFS;
1946                         print_dbg(gi, "  Inode: busy\n");
1947                 }
1948         }
1949
1950         error = 0;
1951
1952 out:
1953         spin_unlock(&gl->gl_spin);
1954         return error;
1955 }
1956
1957 /**
1958  * gfs2_dump_lockstate - print out the current lockstate
1959  * @sdp: the filesystem
1960  * @ub: the buffer to copy the information into
1961  *
1962  * If @ub is NULL, dump the lockstate to the console.
1963  *
1964  */
1965
1966 static int gfs2_dump_lockstate(struct gfs2_sbd *sdp)
1967 {
1968         struct gfs2_glock *gl;
1969         struct hlist_node *h;
1970         unsigned int x;
1971         int error = 0;
1972
1973         for (x = 0; x < GFS2_GL_HASH_SIZE; x++) {
1974
1975                 read_lock(gl_lock_addr(x));
1976
1977                 hlist_for_each_entry(gl, h, &gl_hash_table[x].hb_list, gl_list) {
1978                         if (gl->gl_sbd != sdp)
1979                                 continue;
1980
1981                         error = dump_glock(NULL, gl);
1982                         if (error)
1983                                 break;
1984                 }
1985
1986                 read_unlock(gl_lock_addr(x));
1987
1988                 if (error)
1989                         break;
1990         }
1991
1992
1993         return error;
1994 }
1995
1996 /**
1997  * gfs2_scand - Look for cached glocks and inodes to toss from memory
1998  * @sdp: Pointer to GFS2 superblock
1999  *
2000  * One of these daemons runs, finding candidates to add to sd_reclaim_list.
2001  * See gfs2_glockd()
2002  */
2003
2004 static int gfs2_scand(void *data)
2005 {
2006         unsigned x;
2007         unsigned delay;
2008
2009         while (!kthread_should_stop()) {
2010                 for (x = 0; x < GFS2_GL_HASH_SIZE; x++)
2011                         examine_bucket(scan_glock, NULL, x);
2012                 if (freezing(current))
2013                         refrigerator();
2014                 delay = scand_secs;
2015                 if (delay < 1)
2016                         delay = 1;
2017                 schedule_timeout_interruptible(delay * HZ);
2018         }
2019
2020         return 0;
2021 }
2022
2023
2024
2025 int __init gfs2_glock_init(void)
2026 {
2027         unsigned i;
2028         for(i = 0; i < GFS2_GL_HASH_SIZE; i++) {
2029                 INIT_HLIST_HEAD(&gl_hash_table[i].hb_list);
2030         }
2031 #ifdef GL_HASH_LOCK_SZ
2032         for(i = 0; i < GL_HASH_LOCK_SZ; i++) {
2033                 rwlock_init(&gl_hash_locks[i]);
2034         }
2035 #endif
2036
2037         scand_process = kthread_run(gfs2_scand, NULL, "gfs2_scand");
2038         if (IS_ERR(scand_process))
2039                 return PTR_ERR(scand_process);
2040
2041         glock_workqueue = create_workqueue("glock_workqueue");
2042         if (IS_ERR(glock_workqueue)) {
2043                 kthread_stop(scand_process);
2044                 return PTR_ERR(glock_workqueue);
2045         }
2046
2047         return 0;
2048 }
2049
2050 void gfs2_glock_exit(void)
2051 {
2052         destroy_workqueue(glock_workqueue);
2053         kthread_stop(scand_process);
2054 }
2055
2056 module_param(scand_secs, uint, S_IRUGO|S_IWUSR);
2057 MODULE_PARM_DESC(scand_secs, "The number of seconds between scand runs");
2058
2059 static int gfs2_glock_iter_next(struct glock_iter *gi)
2060 {
2061         struct gfs2_glock *gl;
2062
2063 restart:
2064         read_lock(gl_lock_addr(gi->hash));
2065         gl = gi->gl;
2066         if (gl) {
2067                 gi->gl = hlist_entry(gl->gl_list.next,
2068                                      struct gfs2_glock, gl_list);
2069                 if (gi->gl)
2070                         gfs2_glock_hold(gi->gl);
2071         }
2072         read_unlock(gl_lock_addr(gi->hash));
2073         if (gl)
2074                 gfs2_glock_put(gl);
2075         if (gl && gi->gl == NULL)
2076                 gi->hash++;
2077         while(gi->gl == NULL) {
2078                 if (gi->hash >= GFS2_GL_HASH_SIZE)
2079                         return 1;
2080                 read_lock(gl_lock_addr(gi->hash));
2081                 gi->gl = hlist_entry(gl_hash_table[gi->hash].hb_list.first,
2082                                      struct gfs2_glock, gl_list);
2083                 if (gi->gl)
2084                         gfs2_glock_hold(gi->gl);
2085                 read_unlock(gl_lock_addr(gi->hash));
2086                 gi->hash++;
2087         }
2088
2089         if (gi->sdp != gi->gl->gl_sbd)
2090                 goto restart;
2091
2092         return 0;
2093 }
2094
2095 static void gfs2_glock_iter_free(struct glock_iter *gi)
2096 {
2097         if (gi->gl)
2098                 gfs2_glock_put(gi->gl);
2099         kfree(gi);
2100 }
2101
2102 static struct glock_iter *gfs2_glock_iter_init(struct gfs2_sbd *sdp)
2103 {
2104         struct glock_iter *gi;
2105
2106         gi = kmalloc(sizeof (*gi), GFP_KERNEL);
2107         if (!gi)
2108                 return NULL;
2109
2110         gi->sdp = sdp;
2111         gi->hash = 0;
2112         gi->seq = NULL;
2113         gi->gl = NULL;
2114         memset(gi->string, 0, sizeof(gi->string));
2115
2116         if (gfs2_glock_iter_next(gi)) {
2117                 gfs2_glock_iter_free(gi);
2118                 return NULL;
2119         }
2120
2121         return gi;
2122 }
2123
2124 static void *gfs2_glock_seq_start(struct seq_file *file, loff_t *pos)
2125 {
2126         struct glock_iter *gi;
2127         loff_t n = *pos;
2128
2129         gi = gfs2_glock_iter_init(file->private);
2130         if (!gi)
2131                 return NULL;
2132
2133         while(n--) {
2134                 if (gfs2_glock_iter_next(gi)) {
2135                         gfs2_glock_iter_free(gi);
2136                         return NULL;
2137                 }
2138         }
2139
2140         return gi;
2141 }
2142
2143 static void *gfs2_glock_seq_next(struct seq_file *file, void *iter_ptr,
2144                                  loff_t *pos)
2145 {
2146         struct glock_iter *gi = iter_ptr;
2147
2148         (*pos)++;
2149
2150         if (gfs2_glock_iter_next(gi)) {
2151                 gfs2_glock_iter_free(gi);
2152                 return NULL;
2153         }
2154
2155         return gi;
2156 }
2157
2158 static void gfs2_glock_seq_stop(struct seq_file *file, void *iter_ptr)
2159 {
2160         struct glock_iter *gi = iter_ptr;
2161         if (gi)
2162                 gfs2_glock_iter_free(gi);
2163 }
2164
2165 static int gfs2_glock_seq_show(struct seq_file *file, void *iter_ptr)
2166 {
2167         struct glock_iter *gi = iter_ptr;
2168
2169         gi->seq = file;
2170         dump_glock(gi, gi->gl);
2171
2172         return 0;
2173 }
2174
2175 static const struct seq_operations gfs2_glock_seq_ops = {
2176         .start = gfs2_glock_seq_start,
2177         .next  = gfs2_glock_seq_next,
2178         .stop  = gfs2_glock_seq_stop,
2179         .show  = gfs2_glock_seq_show,
2180 };
2181
2182 static int gfs2_debugfs_open(struct inode *inode, struct file *file)
2183 {
2184         struct seq_file *seq;
2185         int ret;
2186
2187         ret = seq_open(file, &gfs2_glock_seq_ops);
2188         if (ret)
2189                 return ret;
2190
2191         seq = file->private_data;
2192         seq->private = inode->i_private;
2193
2194         return 0;
2195 }
2196
2197 static const struct file_operations gfs2_debug_fops = {
2198         .owner   = THIS_MODULE,
2199         .open    = gfs2_debugfs_open,
2200         .read    = seq_read,
2201         .llseek  = seq_lseek,
2202         .release = seq_release
2203 };
2204
2205 int gfs2_create_debugfs_file(struct gfs2_sbd *sdp)
2206 {
2207         sdp->debugfs_dir = debugfs_create_dir(sdp->sd_table_name, gfs2_root);
2208         if (!sdp->debugfs_dir)
2209                 return -ENOMEM;
2210         sdp->debugfs_dentry_glocks = debugfs_create_file("glocks",
2211                                                          S_IFREG | S_IRUGO,
2212                                                          sdp->debugfs_dir, sdp,
2213                                                          &gfs2_debug_fops);
2214         if (!sdp->debugfs_dentry_glocks)
2215                 return -ENOMEM;
2216
2217         return 0;
2218 }
2219
2220 void gfs2_delete_debugfs_file(struct gfs2_sbd *sdp)
2221 {
2222         if (sdp && sdp->debugfs_dir) {
2223                 if (sdp->debugfs_dentry_glocks) {
2224                         debugfs_remove(sdp->debugfs_dentry_glocks);
2225                         sdp->debugfs_dentry_glocks = NULL;
2226                 }
2227                 debugfs_remove(sdp->debugfs_dir);
2228                 sdp->debugfs_dir = NULL;
2229         }
2230 }
2231
2232 int gfs2_register_debugfs(void)
2233 {
2234         gfs2_root = debugfs_create_dir("gfs2", NULL);
2235         return gfs2_root ? 0 : -ENOMEM;
2236 }
2237
2238 void gfs2_unregister_debugfs(void)
2239 {
2240         debugfs_remove(gfs2_root);
2241         gfs2_root = NULL;
2242 }