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