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