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