Commit | Line | Data |
---|---|---|
0b61f8a4 | 1 | // SPDX-License-Identifier: GPL-2.0 |
1da177e4 | 2 | /* |
7b718769 NS |
3 | * Copyright (c) 2001-2005 Silicon Graphics, Inc. |
4 | * All Rights Reserved. | |
1da177e4 | 5 | */ |
1da177e4 | 6 | #include "xfs.h" |
73efe4a4 | 7 | #include "xfs_error.h" |
1da177e4 | 8 | |
1da177e4 LT |
9 | static struct ctl_table_header *xfs_table_header; |
10 | ||
1da177e4 LT |
11 | #ifdef CONFIG_PROC_FS |
12 | STATIC int | |
13 | xfs_stats_clear_proc_handler( | |
b2410e92 JP |
14 | struct ctl_table *ctl, |
15 | int write, | |
32927393 | 16 | void *buffer, |
b2410e92 JP |
17 | size_t *lenp, |
18 | loff_t *ppos) | |
1da177e4 | 19 | { |
bb230c12 | 20 | int ret, *valp = ctl->data; |
1da177e4 | 21 | |
8d65af78 | 22 | ret = proc_dointvec_minmax(ctl, write, buffer, lenp, ppos); |
1da177e4 LT |
23 | |
24 | if (!ret && write && *valp) { | |
80529c45 | 25 | xfs_stats_clearall(xfsstats.xs_stats); |
1da177e4 LT |
26 | xfs_stats_clear = 0; |
27 | } | |
28 | ||
29 | return ret; | |
30 | } | |
73efe4a4 DC |
31 | |
32 | STATIC int | |
33 | xfs_panic_mask_proc_handler( | |
b2410e92 JP |
34 | struct ctl_table *ctl, |
35 | int write, | |
32927393 | 36 | void *buffer, |
b2410e92 JP |
37 | size_t *lenp, |
38 | loff_t *ppos) | |
73efe4a4 DC |
39 | { |
40 | int ret, *valp = ctl->data; | |
41 | ||
42 | ret = proc_dointvec_minmax(ctl, write, buffer, lenp, ppos); | |
43 | if (!ret && write) { | |
44 | xfs_panic_mask = *valp; | |
45 | #ifdef DEBUG | |
46 | xfs_panic_mask |= (XFS_PTAG_SHUTDOWN_CORRUPT | XFS_PTAG_LOGRES); | |
47 | #endif | |
48 | } | |
49 | return ret; | |
50 | } | |
1da177e4 LT |
51 | #endif /* CONFIG_PROC_FS */ |
52 | ||
3442de9c | 53 | STATIC int |
89e0eb8c | 54 | xfs_deprecated_dointvec_minmax( |
3442de9c PR |
55 | struct ctl_table *ctl, |
56 | int write, | |
57 | void *buffer, | |
58 | size_t *lenp, | |
59 | loff_t *ppos) | |
60 | { | |
61 | if (write) { | |
89e0eb8c DW |
62 | printk_ratelimited(KERN_WARNING |
63 | "XFS: %s sysctl option is deprecated.\n", | |
3442de9c PR |
64 | ctl->procname); |
65 | } | |
66 | return proc_dointvec_minmax(ctl, write, buffer, lenp, ppos); | |
67 | } | |
68 | ||
b2410e92 | 69 | static struct ctl_table xfs_table[] = { |
3a68cbfe | 70 | { |
3a68cbfe EB |
71 | .procname = "irix_sgid_inherit", |
72 | .data = &xfs_params.sgid_inherit.val, | |
73 | .maxlen = sizeof(int), | |
74 | .mode = 0644, | |
89e0eb8c | 75 | .proc_handler = xfs_deprecated_dointvec_minmax, |
3a68cbfe EB |
76 | .extra1 = &xfs_params.sgid_inherit.min, |
77 | .extra2 = &xfs_params.sgid_inherit.max | |
78 | }, | |
79 | { | |
3a68cbfe EB |
80 | .procname = "irix_symlink_mode", |
81 | .data = &xfs_params.symlink_mode.val, | |
82 | .maxlen = sizeof(int), | |
83 | .mode = 0644, | |
89e0eb8c | 84 | .proc_handler = xfs_deprecated_dointvec_minmax, |
3a68cbfe EB |
85 | .extra1 = &xfs_params.symlink_mode.min, |
86 | .extra2 = &xfs_params.symlink_mode.max | |
87 | }, | |
88 | { | |
3a68cbfe EB |
89 | .procname = "panic_mask", |
90 | .data = &xfs_params.panic_mask.val, | |
91 | .maxlen = sizeof(int), | |
92 | .mode = 0644, | |
73efe4a4 | 93 | .proc_handler = xfs_panic_mask_proc_handler, |
3a68cbfe EB |
94 | .extra1 = &xfs_params.panic_mask.min, |
95 | .extra2 = &xfs_params.panic_mask.max | |
96 | }, | |
d3446eac | 97 | |
3a68cbfe | 98 | { |
3a68cbfe EB |
99 | .procname = "error_level", |
100 | .data = &xfs_params.error_level.val, | |
101 | .maxlen = sizeof(int), | |
102 | .mode = 0644, | |
6d456111 | 103 | .proc_handler = proc_dointvec_minmax, |
3a68cbfe EB |
104 | .extra1 = &xfs_params.error_level.min, |
105 | .extra2 = &xfs_params.error_level.max | |
106 | }, | |
107 | { | |
3a68cbfe EB |
108 | .procname = "xfssyncd_centisecs", |
109 | .data = &xfs_params.syncd_timer.val, | |
110 | .maxlen = sizeof(int), | |
111 | .mode = 0644, | |
6d456111 | 112 | .proc_handler = proc_dointvec_minmax, |
3a68cbfe EB |
113 | .extra1 = &xfs_params.syncd_timer.min, |
114 | .extra2 = &xfs_params.syncd_timer.max | |
115 | }, | |
116 | { | |
3a68cbfe EB |
117 | .procname = "inherit_sync", |
118 | .data = &xfs_params.inherit_sync.val, | |
119 | .maxlen = sizeof(int), | |
120 | .mode = 0644, | |
6d456111 | 121 | .proc_handler = proc_dointvec_minmax, |
3a68cbfe EB |
122 | .extra1 = &xfs_params.inherit_sync.min, |
123 | .extra2 = &xfs_params.inherit_sync.max | |
124 | }, | |
125 | { | |
3a68cbfe EB |
126 | .procname = "inherit_nodump", |
127 | .data = &xfs_params.inherit_nodump.val, | |
128 | .maxlen = sizeof(int), | |
129 | .mode = 0644, | |
6d456111 | 130 | .proc_handler = proc_dointvec_minmax, |
3a68cbfe EB |
131 | .extra1 = &xfs_params.inherit_nodump.min, |
132 | .extra2 = &xfs_params.inherit_nodump.max | |
133 | }, | |
134 | { | |
3a68cbfe EB |
135 | .procname = "inherit_noatime", |
136 | .data = &xfs_params.inherit_noatim.val, | |
137 | .maxlen = sizeof(int), | |
138 | .mode = 0644, | |
6d456111 | 139 | .proc_handler = proc_dointvec_minmax, |
3a68cbfe EB |
140 | .extra1 = &xfs_params.inherit_noatim.min, |
141 | .extra2 = &xfs_params.inherit_noatim.max | |
142 | }, | |
3a68cbfe | 143 | { |
3a68cbfe EB |
144 | .procname = "inherit_nosymlinks", |
145 | .data = &xfs_params.inherit_nosym.val, | |
146 | .maxlen = sizeof(int), | |
147 | .mode = 0644, | |
6d456111 | 148 | .proc_handler = proc_dointvec_minmax, |
3a68cbfe EB |
149 | .extra1 = &xfs_params.inherit_nosym.min, |
150 | .extra2 = &xfs_params.inherit_nosym.max | |
151 | }, | |
152 | { | |
3a68cbfe EB |
153 | .procname = "rotorstep", |
154 | .data = &xfs_params.rotorstep.val, | |
155 | .maxlen = sizeof(int), | |
156 | .mode = 0644, | |
6d456111 | 157 | .proc_handler = proc_dointvec_minmax, |
3a68cbfe EB |
158 | .extra1 = &xfs_params.rotorstep.min, |
159 | .extra2 = &xfs_params.rotorstep.max | |
160 | }, | |
161 | { | |
3a68cbfe EB |
162 | .procname = "inherit_nodefrag", |
163 | .data = &xfs_params.inherit_nodfrg.val, | |
164 | .maxlen = sizeof(int), | |
165 | .mode = 0644, | |
6d456111 | 166 | .proc_handler = proc_dointvec_minmax, |
3a68cbfe EB |
167 | .extra1 = &xfs_params.inherit_nodfrg.min, |
168 | .extra2 = &xfs_params.inherit_nodfrg.max | |
169 | }, | |
2a82b8be | 170 | { |
2a82b8be DC |
171 | .procname = "filestream_centisecs", |
172 | .data = &xfs_params.fstrm_timer.val, | |
173 | .maxlen = sizeof(int), | |
174 | .mode = 0644, | |
6d456111 | 175 | .proc_handler = proc_dointvec_minmax, |
2a82b8be DC |
176 | .extra1 = &xfs_params.fstrm_timer.min, |
177 | .extra2 = &xfs_params.fstrm_timer.max, | |
178 | }, | |
579b62fa BF |
179 | { |
180 | .procname = "speculative_prealloc_lifetime", | |
9669f51d | 181 | .data = &xfs_params.blockgc_timer.val, |
579b62fa BF |
182 | .maxlen = sizeof(int), |
183 | .mode = 0644, | |
184 | .proc_handler = proc_dointvec_minmax, | |
9669f51d DW |
185 | .extra1 = &xfs_params.blockgc_timer.min, |
186 | .extra2 = &xfs_params.blockgc_timer.max, | |
83104d44 | 187 | }, |
89e0eb8c DW |
188 | { |
189 | .procname = "speculative_cow_prealloc_lifetime", | |
190 | .data = &xfs_params.blockgc_timer.val, | |
191 | .maxlen = sizeof(int), | |
192 | .mode = 0644, | |
193 | .proc_handler = xfs_deprecated_dointvec_minmax, | |
194 | .extra1 = &xfs_params.blockgc_timer.min, | |
195 | .extra2 = &xfs_params.blockgc_timer.max, | |
196 | }, | |
1da177e4 LT |
197 | /* please keep this the last entry */ |
198 | #ifdef CONFIG_PROC_FS | |
3a68cbfe | 199 | { |
3a68cbfe EB |
200 | .procname = "stats_clear", |
201 | .data = &xfs_params.stats_clear.val, | |
202 | .maxlen = sizeof(int), | |
203 | .mode = 0644, | |
6d456111 | 204 | .proc_handler = xfs_stats_clear_proc_handler, |
3a68cbfe EB |
205 | .extra1 = &xfs_params.stats_clear.min, |
206 | .extra2 = &xfs_params.stats_clear.max | |
207 | }, | |
1da177e4 LT |
208 | #endif /* CONFIG_PROC_FS */ |
209 | ||
3a68cbfe | 210 | {} |
1da177e4 LT |
211 | }; |
212 | ||
b2410e92 | 213 | static struct ctl_table xfs_dir_table[] = { |
3a68cbfe | 214 | { |
3a68cbfe EB |
215 | .procname = "xfs", |
216 | .mode = 0555, | |
217 | .child = xfs_table | |
218 | }, | |
219 | {} | |
1da177e4 LT |
220 | }; |
221 | ||
b2410e92 | 222 | static struct ctl_table xfs_root_table[] = { |
3a68cbfe | 223 | { |
3a68cbfe EB |
224 | .procname = "fs", |
225 | .mode = 0555, | |
226 | .child = xfs_dir_table | |
227 | }, | |
228 | {} | |
1da177e4 LT |
229 | }; |
230 | ||
9f8868ff | 231 | int |
1da177e4 LT |
232 | xfs_sysctl_register(void) |
233 | { | |
0b4d4147 | 234 | xfs_table_header = register_sysctl_table(xfs_root_table); |
9f8868ff CH |
235 | if (!xfs_table_header) |
236 | return -ENOMEM; | |
237 | return 0; | |
1da177e4 LT |
238 | } |
239 | ||
240 | void | |
241 | xfs_sysctl_unregister(void) | |
242 | { | |
9f8868ff | 243 | unregister_sysctl_table(xfs_table_header); |
1da177e4 | 244 | } |