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