diff options
Diffstat (limited to 'fs/dlm/main.c')
| -rw-r--r-- | fs/dlm/main.c | 21 |
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); |
