xref: /linux/fs/dlm/main.c (revision c532de5a67a70f8533d495f8f2aaa9a0491c3ad0)
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