summaryrefslogtreecommitdiff
path: root/fs/dlm/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/dlm/main.c')
-rw-r--r--fs/dlm/main.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/fs/dlm/main.c b/fs/dlm/main.c
index a77338be3237..a44d16da7187 100644
--- a/fs/dlm/main.c
+++ b/fs/dlm/main.c
@@ -22,6 +22,8 @@
#define CREATE_TRACE_POINTS
#include <trace/events/dlm.h>
+struct workqueue_struct *dlm_wq;
+
static int __init init_dlm(void)
{
int error;
@@ -46,20 +48,22 @@ static int __init init_dlm(void)
if (error)
goto out_debug;
- error = dlm_netlink_init();
+ error = dlm_plock_init();
if (error)
goto out_user;
- error = dlm_plock_init();
- if (error)
- goto out_netlink;
+ dlm_wq = alloc_workqueue("dlm_wq", WQ_PERCPU, 0);
+ if (!dlm_wq) {
+ error = -ENOMEM;
+ goto out_plock;
+ }
printk("DLM installed\n");
return 0;
- out_netlink:
- dlm_netlink_exit();
+ out_plock:
+ dlm_plock_exit();
out_user:
dlm_user_exit();
out_debug:
@@ -76,14 +80,15 @@ static int __init init_dlm(void)
static void __exit exit_dlm(void)
{
+ /* be sure every pending work e.g. freeing is done */
+ destroy_workqueue(dlm_wq);
dlm_plock_exit();
- dlm_netlink_exit();
dlm_user_exit();
dlm_config_exit();
- dlm_memory_exit();
dlm_lockspace_exit();
dlm_midcomms_exit();
dlm_unregister_debugfs();
+ dlm_memory_exit();
}
module_init(init_dlm);