1 // SPDX-License-Identifier: GPL-2.0-only 2 /****************************************************************************** 3 ******************************************************************************* 4 ** 5 ** Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved. 6 ** Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. 7 ** 8 ** 9 ******************************************************************************* 10 ******************************************************************************/ 11 12 #include <linux/module.h> 13 14 #include "dlm_internal.h" 15 #include "lockspace.h" 16 #include "lock.h" 17 #include "user.h" 18 #include "memory.h" 19 #include "config.h" 20 #include "midcomms.h" 21 22 #define CREATE_TRACE_POINTS 23 #include <trace/events/dlm.h> 24 25 struct workqueue_struct *dlm_wq; 26 27 static int __init init_dlm(void) 28 { 29 int error; 30 31 error = dlm_memory_init(); 32 if (error) 33 goto out; 34 35 dlm_midcomms_init(); 36 37 error = dlm_lockspace_init(); 38 if (error) 39 goto out_mem; 40 41 error = dlm_config_init(); 42 if (error) 43 goto out_lockspace; 44 45 dlm_register_debugfs(); 46 47 error = dlm_user_init(); 48 if (error) 49 goto out_debug; 50 51 error = dlm_plock_init(); 52 if (error) 53 goto out_user; 54 55 dlm_wq = alloc_workqueue("dlm_wq", 0, 0); 56 if (!dlm_wq) { 57 error = -ENOMEM; 58 goto out_plock; 59 } 60 61 printk("DLM installed\n"); 62 63 return 0; 64 65 out_plock: 66 dlm_plock_exit(); 67 out_user: 68 dlm_user_exit(); 69 out_debug: 70 dlm_unregister_debugfs(); 71 dlm_config_exit(); 72 out_lockspace: 73 dlm_lockspace_exit(); 74 out_mem: 75 dlm_midcomms_exit(); 76 dlm_memory_exit(); 77 out: 78 return error; 79 } 80 81 static void __exit exit_dlm(void) 82 { 83 /* be sure every pending work e.g. freeing is done */ 84 destroy_workqueue(dlm_wq); 85 dlm_plock_exit(); 86 dlm_user_exit(); 87 dlm_config_exit(); 88 dlm_lockspace_exit(); 89 dlm_midcomms_exit(); 90 dlm_unregister_debugfs(); 91 dlm_memory_exit(); 92 } 93 94 module_init(init_dlm); 95 module_exit(exit_dlm); 96 97 MODULE_DESCRIPTION("Distributed Lock Manager"); 98 MODULE_AUTHOR("Red Hat, Inc."); 99 MODULE_LICENSE("GPL"); 100 101 EXPORT_SYMBOL_GPL(dlm_new_lockspace); 102 EXPORT_SYMBOL_GPL(dlm_release_lockspace); 103 EXPORT_SYMBOL_GPL(dlm_lock); 104 EXPORT_SYMBOL_GPL(dlm_unlock); 105 106