1 /******************************************************************************
2 *******************************************************************************
3 **
4 **  Copyright (C) Sistina Software, Inc.  1997-2003  All rights reserved.
5 **  Copyright (C) 2004-2008 Red Hat, Inc.  All rights reserved.
6 **
7 **  This copyrighted material is made available to anyone wishing to use,
8 **  modify, copy, or redistribute it subject to the terms and conditions
9 **  of the GNU General Public License v.2.
10 **
11 *******************************************************************************
12 ******************************************************************************/
13 
14 #include "dlm_internal.h"
15 #include "lockspace.h"
16 #include "member.h"
17 #include "recoverd.h"
18 #include "ast.h"
19 #include "dir.h"
20 #include "lowcomms.h"
21 #include "config.h"
22 #include "memory.h"
23 #include "lock.h"
24 #include "recover.h"
25 #include "requestqueue.h"
26 #include "user.h"
27 
28 static int			ls_count;
29 static struct mutex		ls_lock;
30 static struct list_head		lslist;
31 static spinlock_t		lslist_lock;
32 static struct task_struct *	scand_task;
33 
34 
dlm_control_store(struct dlm_ls * ls,const char * buf,size_t len)35 static ssize_t dlm_control_store(struct dlm_ls *ls, const char *buf, size_t len)
36 {
37 	ssize_t ret = len;
38 	int n = simple_strtol(buf, NULL, 0);
39 
40 	ls = dlm_find_lockspace_local(ls->ls_local_handle);
41 	if (!ls)
42 		return -EINVAL;
43 
44 	switch (n) {
45 	case 0:
46 		dlm_ls_stop(ls);
47 		break;
48 	case 1:
49 		dlm_ls_start(ls);
50 		break;
51 	default:
52 		ret = -EINVAL;
53 	}
54 	dlm_put_lockspace(ls);
55 	return ret;
56 }
57 
dlm_event_store(struct dlm_ls * ls,const char * buf,size_t len)58 static ssize_t dlm_event_store(struct dlm_ls *ls, const char *buf, size_t len)
59 {
60 	ls->ls_uevent_result = simple_strtol(buf, NULL, 0);
61 	set_bit(LSFL_UEVENT_WAIT, &ls->ls_flags);
62 	wake_up(&ls->ls_uevent_wait);
63 	return len;
64 }
65 
dlm_id_show(struct dlm_ls * ls,char * buf)66 static ssize_t dlm_id_show(struct dlm_ls *ls, char *buf)
67 {
68 	return snprintf(buf, PAGE_SIZE, "%u\n", ls->ls_global_id);
69 }
70 
dlm_id_store(struct dlm_ls * ls,const char * buf,size_t len)71 static ssize_t dlm_id_store(struct dlm_ls *ls, const char *buf, size_t len)
72 {
73 	ls->ls_global_id = simple_strtoul(buf, NULL, 0);
74 	return len;
75 }
76 
dlm_recover_status_show(struct dlm_ls * ls,char * buf)77 static ssize_t dlm_recover_status_show(struct dlm_ls *ls, char *buf)
78 {
79 	uint32_t status = dlm_recover_status(ls);
80 	return snprintf(buf, PAGE_SIZE, "%x\n", status);
81 }
82 
dlm_recover_nodeid_show(struct dlm_ls * ls,char * buf)83 static ssize_t dlm_recover_nodeid_show(struct dlm_ls *ls, char *buf)
84 {
85 	return snprintf(buf, PAGE_SIZE, "%d\n", ls->ls_recover_nodeid);
86 }
87 
88 struct dlm_attr {
89 	struct attribute attr;
90 	ssize_t (*show)(struct dlm_ls *, char *);
91 	ssize_t (*store)(struct dlm_ls *, const char *, size_t);
92 };
93 
94 static struct dlm_attr dlm_attr_control = {
95 	.attr  = {.name = "control", .mode = S_IWUSR},
96 	.store = dlm_control_store
97 };
98 
99 static struct dlm_attr dlm_attr_event = {
100 	.attr  = {.name = "event_done", .mode = S_IWUSR},
101 	.store = dlm_event_store
102 };
103 
104 static struct dlm_attr dlm_attr_id = {
105 	.attr  = {.name = "id", .mode = S_IRUGO | S_IWUSR},
106 	.show  = dlm_id_show,
107 	.store = dlm_id_store
108 };
109 
110 static struct dlm_attr dlm_attr_recover_status = {
111 	.attr  = {.name = "recover_status", .mode = S_IRUGO},
112 	.show  = dlm_recover_status_show
113 };
114 
115 static struct dlm_attr dlm_attr_recover_nodeid = {
116 	.attr  = {.name = "recover_nodeid", .mode = S_IRUGO},
117 	.show  = dlm_recover_nodeid_show
118 };
119 
120 static struct attribute *dlm_attrs[] = {
121 	&dlm_attr_control.attr,
122 	&dlm_attr_event.attr,
123 	&dlm_attr_id.attr,
124 	&dlm_attr_recover_status.attr,
125 	&dlm_attr_recover_nodeid.attr,
126 	NULL,
127 };
128 
dlm_attr_show(struct kobject * kobj,struct attribute * attr,char * buf)129 static ssize_t dlm_attr_show(struct kobject *kobj, struct attribute *attr,
130 			     char *buf)
131 {
132 	struct dlm_ls *ls  = container_of(kobj, struct dlm_ls, ls_kobj);
133 	struct dlm_attr *a = container_of(attr, struct dlm_attr, attr);
134 	return a->show ? a->show(ls, buf) : 0;
135 }
136 
dlm_attr_store(struct kobject * kobj,struct attribute * attr,const char * buf,size_t len)137 static ssize_t dlm_attr_store(struct kobject *kobj, struct attribute *attr,
138 			      const char *buf, size_t len)
139 {
140 	struct dlm_ls *ls  = container_of(kobj, struct dlm_ls, ls_kobj);
141 	struct dlm_attr *a = container_of(attr, struct dlm_attr, attr);
142 	return a->store ? a->store(ls, buf, len) : len;
143 }
144 
lockspace_kobj_release(struct kobject * k)145 static void lockspace_kobj_release(struct kobject *k)
146 {
147 	struct dlm_ls *ls  = container_of(k, struct dlm_ls, ls_kobj);
148 	kfree(ls);
149 }
150 
151 static const struct sysfs_ops dlm_attr_ops = {
152 	.show  = dlm_attr_show,
153 	.store = dlm_attr_store,
154 };
155 
156 static struct kobj_type dlm_ktype = {
157 	.default_attrs = dlm_attrs,
158 	.sysfs_ops     = &dlm_attr_ops,
159 	.release       = lockspace_kobj_release,
160 };
161 
162 static struct kset *dlm_kset;
163 
do_uevent(struct dlm_ls * ls,int in)164 static int do_uevent(struct dlm_ls *ls, int in)
165 {
166 	int error;
167 
168 	if (in)
169 		kobject_uevent(&ls->ls_kobj, KOBJ_ONLINE);
170 	else
171 		kobject_uevent(&ls->ls_kobj, KOBJ_OFFLINE);
172 
173 	log_debug(ls, "%s the lockspace group...", in ? "joining" : "leaving");
174 
175 	/* dlm_controld will see the uevent, do the necessary group management
176 	   and then write to sysfs to wake us */
177 
178 	error = wait_event_interruptible(ls->ls_uevent_wait,
179 			test_and_clear_bit(LSFL_UEVENT_WAIT, &ls->ls_flags));
180 
181 	log_debug(ls, "group event done %d %d", error, ls->ls_uevent_result);
182 
183 	if (error)
184 		goto out;
185 
186 	error = ls->ls_uevent_result;
187  out:
188 	if (error)
189 		log_error(ls, "group %s failed %d %d", in ? "join" : "leave",
190 			  error, ls->ls_uevent_result);
191 	return error;
192 }
193 
dlm_uevent(struct kset * kset,struct kobject * kobj,struct kobj_uevent_env * env)194 static int dlm_uevent(struct kset *kset, struct kobject *kobj,
195 		      struct kobj_uevent_env *env)
196 {
197 	struct dlm_ls *ls = container_of(kobj, struct dlm_ls, ls_kobj);
198 
199 	add_uevent_var(env, "LOCKSPACE=%s", ls->ls_name);
200 	return 0;
201 }
202 
203 static struct kset_uevent_ops dlm_uevent_ops = {
204 	.uevent = dlm_uevent,
205 };
206 
dlm_lockspace_init(void)207 int __init dlm_lockspace_init(void)
208 {
209 	ls_count = 0;
210 	mutex_init(&ls_lock);
211 	INIT_LIST_HEAD(&lslist);
212 	spin_lock_init(&lslist_lock);
213 
214 	dlm_kset = kset_create_and_add("dlm", &dlm_uevent_ops, kernel_kobj);
215 	if (!dlm_kset) {
216 		printk(KERN_WARNING "%s: can not create kset\n", __func__);
217 		return -ENOMEM;
218 	}
219 	return 0;
220 }
221 
dlm_lockspace_exit(void)222 void dlm_lockspace_exit(void)
223 {
224 	kset_unregister(dlm_kset);
225 }
226 
find_ls_to_scan(void)227 static struct dlm_ls *find_ls_to_scan(void)
228 {
229 	struct dlm_ls *ls;
230 
231 	spin_lock(&lslist_lock);
232 	list_for_each_entry(ls, &lslist, ls_list) {
233 		if (time_after_eq(jiffies, ls->ls_scan_time +
234 					    dlm_config.ci_scan_secs * HZ)) {
235 			spin_unlock(&lslist_lock);
236 			return ls;
237 		}
238 	}
239 	spin_unlock(&lslist_lock);
240 	return NULL;
241 }
242 
dlm_scand(void * data)243 static int dlm_scand(void *data)
244 {
245 	struct dlm_ls *ls;
246 	int timeout_jiffies = dlm_config.ci_scan_secs * HZ;
247 
248 	while (!kthread_should_stop()) {
249 		ls = find_ls_to_scan();
250 		if (ls) {
251 			if (dlm_lock_recovery_try(ls)) {
252 				ls->ls_scan_time = jiffies;
253 				dlm_scan_rsbs(ls);
254 				dlm_scan_timeout(ls);
255 				dlm_unlock_recovery(ls);
256 			} else {
257 				ls->ls_scan_time += HZ;
258 			}
259 		} else {
260 			schedule_timeout_interruptible(timeout_jiffies);
261 		}
262 	}
263 	return 0;
264 }
265 
dlm_scand_start(void)266 static int dlm_scand_start(void)
267 {
268 	struct task_struct *p;
269 	int error = 0;
270 
271 	p = kthread_run(dlm_scand, NULL, "dlm_scand");
272 	if (IS_ERR(p))
273 		error = PTR_ERR(p);
274 	else
275 		scand_task = p;
276 	return error;
277 }
278 
dlm_scand_stop(void)279 static void dlm_scand_stop(void)
280 {
281 	kthread_stop(scand_task);
282 }
283 
dlm_find_lockspace_global(uint32_t id)284 struct dlm_ls *dlm_find_lockspace_global(uint32_t id)
285 {
286 	struct dlm_ls *ls;
287 
288 	spin_lock(&lslist_lock);
289 
290 	list_for_each_entry(ls, &lslist, ls_list) {
291 		if (ls->ls_global_id == id) {
292 			ls->ls_count++;
293 			goto out;
294 		}
295 	}
296 	ls = NULL;
297  out:
298 	spin_unlock(&lslist_lock);
299 	return ls;
300 }
301 
dlm_find_lockspace_local(dlm_lockspace_t * lockspace)302 struct dlm_ls *dlm_find_lockspace_local(dlm_lockspace_t *lockspace)
303 {
304 	struct dlm_ls *ls;
305 
306 	spin_lock(&lslist_lock);
307 	list_for_each_entry(ls, &lslist, ls_list) {
308 		if (ls->ls_local_handle == lockspace) {
309 			ls->ls_count++;
310 			goto out;
311 		}
312 	}
313 	ls = NULL;
314  out:
315 	spin_unlock(&lslist_lock);
316 	return ls;
317 }
318 
dlm_find_lockspace_device(int minor)319 struct dlm_ls *dlm_find_lockspace_device(int minor)
320 {
321 	struct dlm_ls *ls;
322 
323 	spin_lock(&lslist_lock);
324 	list_for_each_entry(ls, &lslist, ls_list) {
325 		if (ls->ls_device.minor == minor) {
326 			ls->ls_count++;
327 			goto out;
328 		}
329 	}
330 	ls = NULL;
331  out:
332 	spin_unlock(&lslist_lock);
333 	return ls;
334 }
335 
dlm_put_lockspace(struct dlm_ls * ls)336 void dlm_put_lockspace(struct dlm_ls *ls)
337 {
338 	spin_lock(&lslist_lock);
339 	ls->ls_count--;
340 	spin_unlock(&lslist_lock);
341 }
342 
remove_lockspace(struct dlm_ls * ls)343 static void remove_lockspace(struct dlm_ls *ls)
344 {
345 	for (;;) {
346 		spin_lock(&lslist_lock);
347 		if (ls->ls_count == 0) {
348 			WARN_ON(ls->ls_create_count != 0);
349 			list_del(&ls->ls_list);
350 			spin_unlock(&lslist_lock);
351 			return;
352 		}
353 		spin_unlock(&lslist_lock);
354 		ssleep(1);
355 	}
356 }
357 
threads_start(void)358 static int threads_start(void)
359 {
360 	int error;
361 
362 	/* Thread which process lock requests for all lockspace's */
363 	error = dlm_astd_start();
364 	if (error) {
365 		log_print("cannot start dlm_astd thread %d", error);
366 		goto fail;
367 	}
368 
369 	error = dlm_scand_start();
370 	if (error) {
371 		log_print("cannot start dlm_scand thread %d", error);
372 		goto astd_fail;
373 	}
374 
375 	/* Thread for sending/receiving messages for all lockspace's */
376 	error = dlm_lowcomms_start();
377 	if (error) {
378 		log_print("cannot start dlm lowcomms %d", error);
379 		goto scand_fail;
380 	}
381 
382 	return 0;
383 
384  scand_fail:
385 	dlm_scand_stop();
386  astd_fail:
387 	dlm_astd_stop();
388  fail:
389 	return error;
390 }
391 
threads_stop(void)392 static void threads_stop(void)
393 {
394 	dlm_scand_stop();
395 	dlm_lowcomms_stop();
396 	dlm_astd_stop();
397 }
398 
new_lockspace(const char * name,int namelen,void ** lockspace,uint32_t flags,int lvblen)399 static int new_lockspace(const char *name, int namelen, void **lockspace,
400 			 uint32_t flags, int lvblen)
401 {
402 	struct dlm_ls *ls;
403 	int i, size, error;
404 	int do_unreg = 0;
405 
406 	if (namelen > DLM_LOCKSPACE_LEN)
407 		return -EINVAL;
408 
409 	if (!lvblen || (lvblen % 8))
410 		return -EINVAL;
411 
412 	if (!try_module_get(THIS_MODULE))
413 		return -EINVAL;
414 
415 	if (!dlm_user_daemon_available()) {
416 		module_put(THIS_MODULE);
417 		return -EUNATCH;
418 	}
419 
420 	error = 0;
421 
422 	spin_lock(&lslist_lock);
423 	list_for_each_entry(ls, &lslist, ls_list) {
424 		WARN_ON(ls->ls_create_count <= 0);
425 		if (ls->ls_namelen != namelen)
426 			continue;
427 		if (memcmp(ls->ls_name, name, namelen))
428 			continue;
429 		if (flags & DLM_LSFL_NEWEXCL) {
430 			error = -EEXIST;
431 			break;
432 		}
433 		ls->ls_create_count++;
434 		*lockspace = ls;
435 		error = 1;
436 		break;
437 	}
438 	spin_unlock(&lslist_lock);
439 
440 	if (error)
441 		goto out;
442 
443 	error = -ENOMEM;
444 
445 	ls = kzalloc(sizeof(struct dlm_ls) + namelen, GFP_NOFS);
446 	if (!ls)
447 		goto out;
448 	memcpy(ls->ls_name, name, namelen);
449 	ls->ls_namelen = namelen;
450 	ls->ls_lvblen = lvblen;
451 	ls->ls_count = 0;
452 	ls->ls_flags = 0;
453 	ls->ls_scan_time = jiffies;
454 
455 	if (flags & DLM_LSFL_TIMEWARN)
456 		set_bit(LSFL_TIMEWARN, &ls->ls_flags);
457 
458 	/* ls_exflags are forced to match among nodes, and we don't
459 	   need to require all nodes to have some flags set */
460 	ls->ls_exflags = (flags & ~(DLM_LSFL_TIMEWARN | DLM_LSFL_FS |
461 				    DLM_LSFL_NEWEXCL));
462 
463 	size = dlm_config.ci_rsbtbl_size;
464 	ls->ls_rsbtbl_size = size;
465 
466 	ls->ls_rsbtbl = kmalloc(sizeof(struct dlm_rsbtable) * size, GFP_NOFS);
467 	if (!ls->ls_rsbtbl)
468 		goto out_lsfree;
469 	for (i = 0; i < size; i++) {
470 		INIT_LIST_HEAD(&ls->ls_rsbtbl[i].list);
471 		INIT_LIST_HEAD(&ls->ls_rsbtbl[i].toss);
472 		spin_lock_init(&ls->ls_rsbtbl[i].lock);
473 	}
474 
475 	size = dlm_config.ci_lkbtbl_size;
476 	ls->ls_lkbtbl_size = size;
477 
478 	ls->ls_lkbtbl = kmalloc(sizeof(struct dlm_lkbtable) * size, GFP_NOFS);
479 	if (!ls->ls_lkbtbl)
480 		goto out_rsbfree;
481 	for (i = 0; i < size; i++) {
482 		INIT_LIST_HEAD(&ls->ls_lkbtbl[i].list);
483 		rwlock_init(&ls->ls_lkbtbl[i].lock);
484 		ls->ls_lkbtbl[i].counter = 1;
485 	}
486 
487 	size = dlm_config.ci_dirtbl_size;
488 	ls->ls_dirtbl_size = size;
489 
490 	ls->ls_dirtbl = kmalloc(sizeof(struct dlm_dirtable) * size, GFP_NOFS);
491 	if (!ls->ls_dirtbl)
492 		goto out_lkbfree;
493 	for (i = 0; i < size; i++) {
494 		INIT_LIST_HEAD(&ls->ls_dirtbl[i].list);
495 		spin_lock_init(&ls->ls_dirtbl[i].lock);
496 	}
497 
498 	INIT_LIST_HEAD(&ls->ls_waiters);
499 	mutex_init(&ls->ls_waiters_mutex);
500 	INIT_LIST_HEAD(&ls->ls_orphans);
501 	mutex_init(&ls->ls_orphans_mutex);
502 	INIT_LIST_HEAD(&ls->ls_timeout);
503 	mutex_init(&ls->ls_timeout_mutex);
504 
505 	INIT_LIST_HEAD(&ls->ls_nodes);
506 	INIT_LIST_HEAD(&ls->ls_nodes_gone);
507 	ls->ls_num_nodes = 0;
508 	ls->ls_low_nodeid = 0;
509 	ls->ls_total_weight = 0;
510 	ls->ls_node_array = NULL;
511 
512 	memset(&ls->ls_stub_rsb, 0, sizeof(struct dlm_rsb));
513 	ls->ls_stub_rsb.res_ls = ls;
514 
515 	ls->ls_debug_rsb_dentry = NULL;
516 	ls->ls_debug_waiters_dentry = NULL;
517 
518 	init_waitqueue_head(&ls->ls_uevent_wait);
519 	ls->ls_uevent_result = 0;
520 	init_completion(&ls->ls_members_done);
521 	ls->ls_members_result = -1;
522 
523 	ls->ls_recoverd_task = NULL;
524 	mutex_init(&ls->ls_recoverd_active);
525 	spin_lock_init(&ls->ls_recover_lock);
526 	spin_lock_init(&ls->ls_rcom_spin);
527 	get_random_bytes(&ls->ls_rcom_seq, sizeof(uint64_t));
528 	ls->ls_recover_status = 0;
529 	ls->ls_recover_seq = 0;
530 	ls->ls_recover_args = NULL;
531 	init_rwsem(&ls->ls_in_recovery);
532 	init_rwsem(&ls->ls_recv_active);
533 	INIT_LIST_HEAD(&ls->ls_requestqueue);
534 	mutex_init(&ls->ls_requestqueue_mutex);
535 	mutex_init(&ls->ls_clear_proc_locks);
536 
537 	ls->ls_recover_buf = kmalloc(dlm_config.ci_buffer_size, GFP_NOFS);
538 	if (!ls->ls_recover_buf)
539 		goto out_dirfree;
540 
541 	INIT_LIST_HEAD(&ls->ls_recover_list);
542 	spin_lock_init(&ls->ls_recover_list_lock);
543 	ls->ls_recover_list_count = 0;
544 	ls->ls_local_handle = ls;
545 	init_waitqueue_head(&ls->ls_wait_general);
546 	INIT_LIST_HEAD(&ls->ls_root_list);
547 	init_rwsem(&ls->ls_root_sem);
548 
549 	down_write(&ls->ls_in_recovery);
550 
551 	spin_lock(&lslist_lock);
552 	ls->ls_create_count = 1;
553 	list_add(&ls->ls_list, &lslist);
554 	spin_unlock(&lslist_lock);
555 
556 	/* needs to find ls in lslist */
557 	error = dlm_recoverd_start(ls);
558 	if (error) {
559 		log_error(ls, "can't start dlm_recoverd %d", error);
560 		goto out_delist;
561 	}
562 
563 	ls->ls_kobj.kset = dlm_kset;
564 	error = kobject_init_and_add(&ls->ls_kobj, &dlm_ktype, NULL,
565 				     "%s", ls->ls_name);
566 	if (error)
567 		goto out_stop;
568 	kobject_uevent(&ls->ls_kobj, KOBJ_ADD);
569 
570 	/* let kobject handle freeing of ls if there's an error */
571 	do_unreg = 1;
572 
573 	/* This uevent triggers dlm_controld in userspace to add us to the
574 	   group of nodes that are members of this lockspace (managed by the
575 	   cluster infrastructure.)  Once it's done that, it tells us who the
576 	   current lockspace members are (via configfs) and then tells the
577 	   lockspace to start running (via sysfs) in dlm_ls_start(). */
578 
579 	error = do_uevent(ls, 1);
580 	if (error)
581 		goto out_stop;
582 
583 	wait_for_completion(&ls->ls_members_done);
584 	error = ls->ls_members_result;
585 	if (error)
586 		goto out_members;
587 
588 	dlm_create_debug_file(ls);
589 
590 	log_debug(ls, "join complete");
591 	*lockspace = ls;
592 	return 0;
593 
594  out_members:
595 	do_uevent(ls, 0);
596 	dlm_clear_members(ls);
597 	kfree(ls->ls_node_array);
598  out_stop:
599 	dlm_recoverd_stop(ls);
600  out_delist:
601 	spin_lock(&lslist_lock);
602 	list_del(&ls->ls_list);
603 	spin_unlock(&lslist_lock);
604 	kfree(ls->ls_recover_buf);
605  out_dirfree:
606 	kfree(ls->ls_dirtbl);
607  out_lkbfree:
608 	kfree(ls->ls_lkbtbl);
609  out_rsbfree:
610 	kfree(ls->ls_rsbtbl);
611  out_lsfree:
612 	if (do_unreg)
613 		kobject_put(&ls->ls_kobj);
614 	else
615 		kfree(ls);
616  out:
617 	module_put(THIS_MODULE);
618 	return error;
619 }
620 
dlm_new_lockspace(const char * name,int namelen,void ** lockspace,uint32_t flags,int lvblen)621 int dlm_new_lockspace(const char *name, int namelen, void **lockspace,
622 		      uint32_t flags, int lvblen)
623 {
624 	int error = 0;
625 
626 	mutex_lock(&ls_lock);
627 	if (!ls_count)
628 		error = threads_start();
629 	if (error)
630 		goto out;
631 
632 	error = new_lockspace(name, namelen, lockspace, flags, lvblen);
633 	if (!error)
634 		ls_count++;
635 	if (error > 0)
636 		error = 0;
637 	if (!ls_count)
638 		threads_stop();
639  out:
640 	mutex_unlock(&ls_lock);
641 	return error;
642 }
643 
644 /* Return 1 if the lockspace still has active remote locks,
645  *        2 if the lockspace still has active local locks.
646  */
lockspace_busy(struct dlm_ls * ls)647 static int lockspace_busy(struct dlm_ls *ls)
648 {
649 	int i, lkb_found = 0;
650 	struct dlm_lkb *lkb;
651 
652 	/* NOTE: We check the lockidtbl here rather than the resource table.
653 	   This is because there may be LKBs queued as ASTs that have been
654 	   unlinked from their RSBs and are pending deletion once the AST has
655 	   been delivered */
656 
657 	for (i = 0; i < ls->ls_lkbtbl_size; i++) {
658 		read_lock(&ls->ls_lkbtbl[i].lock);
659 		if (!list_empty(&ls->ls_lkbtbl[i].list)) {
660 			lkb_found = 1;
661 			list_for_each_entry(lkb, &ls->ls_lkbtbl[i].list,
662 					    lkb_idtbl_list) {
663 				if (!lkb->lkb_nodeid) {
664 					read_unlock(&ls->ls_lkbtbl[i].lock);
665 					return 2;
666 				}
667 			}
668 		}
669 		read_unlock(&ls->ls_lkbtbl[i].lock);
670 	}
671 	return lkb_found;
672 }
673 
release_lockspace(struct dlm_ls * ls,int force)674 static int release_lockspace(struct dlm_ls *ls, int force)
675 {
676 	struct dlm_lkb *lkb;
677 	struct dlm_rsb *rsb;
678 	struct list_head *head;
679 	int i, busy, rv;
680 
681 	busy = lockspace_busy(ls);
682 
683 	spin_lock(&lslist_lock);
684 	if (ls->ls_create_count == 1) {
685 		if (busy > force)
686 			rv = -EBUSY;
687 		else {
688 			/* remove_lockspace takes ls off lslist */
689 			ls->ls_create_count = 0;
690 			rv = 0;
691 		}
692 	} else if (ls->ls_create_count > 1) {
693 		rv = --ls->ls_create_count;
694 	} else {
695 		rv = -EINVAL;
696 	}
697 	spin_unlock(&lslist_lock);
698 
699 	if (rv) {
700 		log_debug(ls, "release_lockspace no remove %d", rv);
701 		return rv;
702 	}
703 
704 	dlm_device_deregister(ls);
705 
706 	if (force < 3 && dlm_user_daemon_available())
707 		do_uevent(ls, 0);
708 
709 	dlm_recoverd_stop(ls);
710 
711 	remove_lockspace(ls);
712 
713 	dlm_delete_debug_file(ls);
714 
715 	dlm_astd_suspend();
716 
717 	kfree(ls->ls_recover_buf);
718 
719 	/*
720 	 * Free direntry structs.
721 	 */
722 
723 	dlm_dir_clear(ls);
724 	kfree(ls->ls_dirtbl);
725 
726 	/*
727 	 * Free all lkb's on lkbtbl[] lists.
728 	 */
729 
730 	for (i = 0; i < ls->ls_lkbtbl_size; i++) {
731 		head = &ls->ls_lkbtbl[i].list;
732 		while (!list_empty(head)) {
733 			lkb = list_entry(head->next, struct dlm_lkb,
734 					 lkb_idtbl_list);
735 
736 			list_del(&lkb->lkb_idtbl_list);
737 
738 			dlm_del_ast(lkb);
739 
740 			if (lkb->lkb_lvbptr && lkb->lkb_flags & DLM_IFL_MSTCPY)
741 				dlm_free_lvb(lkb->lkb_lvbptr);
742 
743 			dlm_free_lkb(lkb);
744 		}
745 	}
746 	dlm_astd_resume();
747 
748 	kfree(ls->ls_lkbtbl);
749 
750 	/*
751 	 * Free all rsb's on rsbtbl[] lists
752 	 */
753 
754 	for (i = 0; i < ls->ls_rsbtbl_size; i++) {
755 		head = &ls->ls_rsbtbl[i].list;
756 		while (!list_empty(head)) {
757 			rsb = list_entry(head->next, struct dlm_rsb,
758 					 res_hashchain);
759 
760 			list_del(&rsb->res_hashchain);
761 			dlm_free_rsb(rsb);
762 		}
763 
764 		head = &ls->ls_rsbtbl[i].toss;
765 		while (!list_empty(head)) {
766 			rsb = list_entry(head->next, struct dlm_rsb,
767 					 res_hashchain);
768 			list_del(&rsb->res_hashchain);
769 			dlm_free_rsb(rsb);
770 		}
771 	}
772 
773 	kfree(ls->ls_rsbtbl);
774 
775 	/*
776 	 * Free structures on any other lists
777 	 */
778 
779 	dlm_purge_requestqueue(ls);
780 	kfree(ls->ls_recover_args);
781 	dlm_clear_free_entries(ls);
782 	dlm_clear_members(ls);
783 	dlm_clear_members_gone(ls);
784 	kfree(ls->ls_node_array);
785 	log_debug(ls, "release_lockspace final free");
786 	kobject_put(&ls->ls_kobj);
787 	/* The ls structure will be freed when the kobject is done with */
788 
789 	module_put(THIS_MODULE);
790 	return 0;
791 }
792 
793 /*
794  * Called when a system has released all its locks and is not going to use the
795  * lockspace any longer.  We free everything we're managing for this lockspace.
796  * Remaining nodes will go through the recovery process as if we'd died.  The
797  * lockspace must continue to function as usual, participating in recoveries,
798  * until this returns.
799  *
800  * Force has 4 possible values:
801  * 0 - don't destroy locksapce if it has any LKBs
802  * 1 - destroy lockspace if it has remote LKBs but not if it has local LKBs
803  * 2 - destroy lockspace regardless of LKBs
804  * 3 - destroy lockspace as part of a forced shutdown
805  */
806 
dlm_release_lockspace(void * lockspace,int force)807 int dlm_release_lockspace(void *lockspace, int force)
808 {
809 	struct dlm_ls *ls;
810 	int error;
811 
812 	ls = dlm_find_lockspace_local(lockspace);
813 	if (!ls)
814 		return -EINVAL;
815 	dlm_put_lockspace(ls);
816 
817 	mutex_lock(&ls_lock);
818 	error = release_lockspace(ls, force);
819 	if (!error)
820 		ls_count--;
821 	if (!ls_count)
822 		threads_stop();
823 	mutex_unlock(&ls_lock);
824 
825 	return error;
826 }
827 
dlm_stop_lockspaces(void)828 void dlm_stop_lockspaces(void)
829 {
830 	struct dlm_ls *ls;
831 
832  restart:
833 	spin_lock(&lslist_lock);
834 	list_for_each_entry(ls, &lslist, ls_list) {
835 		if (!test_bit(LSFL_RUNNING, &ls->ls_flags))
836 			continue;
837 		spin_unlock(&lslist_lock);
838 		log_error(ls, "no userland control daemon, stopping lockspace");
839 		dlm_ls_stop(ls);
840 		goto restart;
841 	}
842 	spin_unlock(&lslist_lock);
843 }
844 
845