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