Commit | Line | Data |
---|---|---|
805e021f CE |
1 | /* |
2 | * Copyright 2000, International Business Machines Corporation and others. | |
3 | * All Rights Reserved. | |
4 | * | |
5 | * This software has been released under the terms of the IBM Public | |
6 | * License. For details, see the LICENSE file in the top-level source | |
7 | * directory or online at http://www.openafs.org/dl/license10.html | |
8 | */ | |
9 | ||
10 | /* | |
11 | * Linux module support routines. | |
12 | * | |
13 | */ | |
14 | #include <afsconfig.h> | |
15 | #include "afs/param.h" | |
16 | ||
17 | ||
18 | #include <linux/module.h> /* early to avoid printf->printk mapping */ | |
19 | #include "afs/sysincludes.h" | |
20 | #include "afsincludes.h" | |
21 | #include <linux/unistd.h> /* For syscall numbers. */ | |
22 | #include <linux/mm.h> | |
23 | ||
24 | #ifdef AFS_AMD64_LINUX20_ENV | |
25 | #include <asm/ia32_unistd.h> | |
26 | #endif | |
27 | ||
28 | #include <linux/proc_fs.h> | |
29 | #include <linux/slab.h> | |
30 | #include <linux/init.h> | |
31 | #include <linux/sched.h> | |
32 | #include <linux/kernel.h> | |
33 | ||
34 | #include "osi_pagecopy.h" | |
35 | ||
36 | extern struct file_system_type afs_fs_type; | |
37 | ||
38 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) | |
39 | DEFINE_MUTEX(afs_global_lock); | |
40 | #else | |
41 | DECLARE_MUTEX(afs_global_lock); | |
42 | #endif | |
43 | int afs_global_owner = 0; | |
44 | ||
45 | #ifdef HAVE_LINUX_KUID_T | |
46 | struct user_namespace *afs_ns; | |
47 | #endif | |
48 | ||
49 | int __init | |
50 | afs_init(void) | |
51 | { | |
52 | int err; | |
53 | ||
54 | #ifdef HAVE_LINUX_KUID_T | |
55 | afs_ns = afs_current_user_ns(); | |
56 | #endif | |
57 | ||
58 | osi_Init(); | |
59 | #if !defined(AFS_NONFSTRANS) | |
60 | osi_linux_nfssrv_init(); | |
61 | #endif | |
62 | ||
63 | err = osi_syscall_init(); | |
64 | if (err) | |
65 | return err; | |
66 | err = afs_init_inodecache(); | |
67 | if (err) { | |
68 | osi_syscall_clean(); | |
69 | return err; | |
70 | } | |
71 | err = register_filesystem(&afs_fs_type); | |
72 | if (err) { | |
73 | afs_destroy_inodecache(); | |
74 | osi_syscall_clean(); | |
75 | return err; | |
76 | } | |
77 | ||
78 | osi_sysctl_init(); | |
79 | #ifdef LINUX_KEYRING_SUPPORT | |
80 | osi_keyring_init(); | |
81 | #endif | |
82 | osi_proc_init(); | |
83 | osi_ioctl_init(); | |
84 | afs_init_pagecopy(); | |
85 | ||
86 | return 0; | |
87 | } | |
88 | ||
89 | void __exit | |
90 | afs_cleanup(void) | |
91 | { | |
92 | afs_shutdown_pagecopy(); | |
93 | ||
94 | #ifdef LINUX_KEYRING_SUPPORT | |
95 | osi_keyring_shutdown(); | |
96 | #endif | |
97 | osi_sysctl_clean(); | |
98 | osi_syscall_clean(); | |
99 | unregister_filesystem(&afs_fs_type); | |
100 | ||
101 | afs_destroy_inodecache(); | |
102 | #if !defined(AFS_NONFSTRANS) | |
103 | osi_linux_nfssrv_shutdown(); | |
104 | #endif | |
105 | shutdown_osisleep(); | |
106 | osi_linux_free_afs_memory(); | |
107 | ||
108 | osi_ioctl_clean(); | |
109 | osi_proc_clean(); | |
110 | ||
111 | return; | |
112 | } | |
113 | ||
114 | MODULE_LICENSE("http://www.openafs.org/dl/license10.html"); | |
115 | module_init(afs_init); | |
116 | module_exit(afs_cleanup); | |
117 |