Linux 4.3-rc2
[deliverable/linux.git] / fs / xfs / xfs_sysctl.c
CommitLineData
1da177e4 1/*
7b718769
NS
2 * Copyright (c) 2001-2005 Silicon Graphics, Inc.
3 * All Rights Reserved.
1da177e4 4 *
7b718769
NS
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License as
1da177e4
LT
7 * published by the Free Software Foundation.
8 *
7b718769
NS
9 * This program is distributed in the hope that it would be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
1da177e4 13 *
7b718769
NS
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write the Free Software Foundation,
16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1da177e4 17 */
1da177e4 18#include "xfs.h"
1da177e4
LT
19#include <linux/sysctl.h>
20#include <linux/proc_fs.h>
73efe4a4 21#include "xfs_error.h"
1da177e4 22
1da177e4
LT
23static struct ctl_table_header *xfs_table_header;
24
1da177e4
LT
25#ifdef CONFIG_PROC_FS
26STATIC int
27xfs_stats_clear_proc_handler(
b2410e92
JP
28 struct ctl_table *ctl,
29 int write,
30 void __user *buffer,
31 size_t *lenp,
32 loff_t *ppos)
1da177e4
LT
33{
34 int c, ret, *valp = ctl->data;
35 __uint32_t vn_active;
36
8d65af78 37 ret = proc_dointvec_minmax(ctl, write, buffer, lenp, ppos);
1da177e4
LT
38
39 if (!ret && write && *valp) {
4f10700a 40 xfs_notice(NULL, "Clearing xfsstats");
6f0419e0 41 for_each_possible_cpu(c) {
1da177e4
LT
42 preempt_disable();
43 /* save vn_active, it's a universal truth! */
44 vn_active = per_cpu(xfsstats, c).vn_active;
45 memset(&per_cpu(xfsstats, c), 0,
46 sizeof(struct xfsstats));
47 per_cpu(xfsstats, c).vn_active = vn_active;
48 preempt_enable();
49 }
50 xfs_stats_clear = 0;
51 }
52
53 return ret;
54}
73efe4a4
DC
55
56STATIC int
57xfs_panic_mask_proc_handler(
b2410e92
JP
58 struct ctl_table *ctl,
59 int write,
60 void __user *buffer,
61 size_t *lenp,
62 loff_t *ppos)
73efe4a4
DC
63{
64 int ret, *valp = ctl->data;
65
66 ret = proc_dointvec_minmax(ctl, write, buffer, lenp, ppos);
67 if (!ret && write) {
68 xfs_panic_mask = *valp;
69#ifdef DEBUG
70 xfs_panic_mask |= (XFS_PTAG_SHUTDOWN_CORRUPT | XFS_PTAG_LOGRES);
71#endif
72 }
73 return ret;
74}
1da177e4
LT
75#endif /* CONFIG_PROC_FS */
76
b2410e92 77static struct ctl_table xfs_table[] = {
3a68cbfe 78 {
3a68cbfe
EB
79 .procname = "irix_sgid_inherit",
80 .data = &xfs_params.sgid_inherit.val,
81 .maxlen = sizeof(int),
82 .mode = 0644,
6d456111 83 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
84 .extra1 = &xfs_params.sgid_inherit.min,
85 .extra2 = &xfs_params.sgid_inherit.max
86 },
87 {
3a68cbfe
EB
88 .procname = "irix_symlink_mode",
89 .data = &xfs_params.symlink_mode.val,
90 .maxlen = sizeof(int),
91 .mode = 0644,
6d456111 92 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
93 .extra1 = &xfs_params.symlink_mode.min,
94 .extra2 = &xfs_params.symlink_mode.max
95 },
96 {
3a68cbfe
EB
97 .procname = "panic_mask",
98 .data = &xfs_params.panic_mask.val,
99 .maxlen = sizeof(int),
100 .mode = 0644,
73efe4a4 101 .proc_handler = xfs_panic_mask_proc_handler,
3a68cbfe
EB
102 .extra1 = &xfs_params.panic_mask.min,
103 .extra2 = &xfs_params.panic_mask.max
104 },
d3446eac 105
3a68cbfe 106 {
3a68cbfe
EB
107 .procname = "error_level",
108 .data = &xfs_params.error_level.val,
109 .maxlen = sizeof(int),
110 .mode = 0644,
6d456111 111 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
112 .extra1 = &xfs_params.error_level.min,
113 .extra2 = &xfs_params.error_level.max
114 },
115 {
3a68cbfe
EB
116 .procname = "xfssyncd_centisecs",
117 .data = &xfs_params.syncd_timer.val,
118 .maxlen = sizeof(int),
119 .mode = 0644,
6d456111 120 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
121 .extra1 = &xfs_params.syncd_timer.min,
122 .extra2 = &xfs_params.syncd_timer.max
123 },
124 {
3a68cbfe
EB
125 .procname = "inherit_sync",
126 .data = &xfs_params.inherit_sync.val,
127 .maxlen = sizeof(int),
128 .mode = 0644,
6d456111 129 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
130 .extra1 = &xfs_params.inherit_sync.min,
131 .extra2 = &xfs_params.inherit_sync.max
132 },
133 {
3a68cbfe
EB
134 .procname = "inherit_nodump",
135 .data = &xfs_params.inherit_nodump.val,
136 .maxlen = sizeof(int),
137 .mode = 0644,
6d456111 138 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
139 .extra1 = &xfs_params.inherit_nodump.min,
140 .extra2 = &xfs_params.inherit_nodump.max
141 },
142 {
3a68cbfe
EB
143 .procname = "inherit_noatime",
144 .data = &xfs_params.inherit_noatim.val,
145 .maxlen = sizeof(int),
146 .mode = 0644,
6d456111 147 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
148 .extra1 = &xfs_params.inherit_noatim.min,
149 .extra2 = &xfs_params.inherit_noatim.max
150 },
3a68cbfe 151 {
3a68cbfe
EB
152 .procname = "inherit_nosymlinks",
153 .data = &xfs_params.inherit_nosym.val,
154 .maxlen = sizeof(int),
155 .mode = 0644,
6d456111 156 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
157 .extra1 = &xfs_params.inherit_nosym.min,
158 .extra2 = &xfs_params.inherit_nosym.max
159 },
160 {
3a68cbfe
EB
161 .procname = "rotorstep",
162 .data = &xfs_params.rotorstep.val,
163 .maxlen = sizeof(int),
164 .mode = 0644,
6d456111 165 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
166 .extra1 = &xfs_params.rotorstep.min,
167 .extra2 = &xfs_params.rotorstep.max
168 },
169 {
3a68cbfe
EB
170 .procname = "inherit_nodefrag",
171 .data = &xfs_params.inherit_nodfrg.val,
172 .maxlen = sizeof(int),
173 .mode = 0644,
6d456111 174 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
175 .extra1 = &xfs_params.inherit_nodfrg.min,
176 .extra2 = &xfs_params.inherit_nodfrg.max
177 },
2a82b8be 178 {
2a82b8be
DC
179 .procname = "filestream_centisecs",
180 .data = &xfs_params.fstrm_timer.val,
181 .maxlen = sizeof(int),
182 .mode = 0644,
6d456111 183 .proc_handler = proc_dointvec_minmax,
2a82b8be
DC
184 .extra1 = &xfs_params.fstrm_timer.min,
185 .extra2 = &xfs_params.fstrm_timer.max,
186 },
579b62fa
BF
187 {
188 .procname = "speculative_prealloc_lifetime",
189 .data = &xfs_params.eofb_timer.val,
190 .maxlen = sizeof(int),
191 .mode = 0644,
192 .proc_handler = proc_dointvec_minmax,
193 .extra1 = &xfs_params.eofb_timer.min,
194 .extra2 = &xfs_params.eofb_timer.max,
195 },
1da177e4
LT
196 /* please keep this the last entry */
197#ifdef CONFIG_PROC_FS
3a68cbfe 198 {
3a68cbfe
EB
199 .procname = "stats_clear",
200 .data = &xfs_params.stats_clear.val,
201 .maxlen = sizeof(int),
202 .mode = 0644,
6d456111 203 .proc_handler = xfs_stats_clear_proc_handler,
3a68cbfe
EB
204 .extra1 = &xfs_params.stats_clear.min,
205 .extra2 = &xfs_params.stats_clear.max
206 },
1da177e4
LT
207#endif /* CONFIG_PROC_FS */
208
3a68cbfe 209 {}
1da177e4
LT
210};
211
b2410e92 212static struct ctl_table xfs_dir_table[] = {
3a68cbfe 213 {
3a68cbfe
EB
214 .procname = "xfs",
215 .mode = 0555,
216 .child = xfs_table
217 },
218 {}
1da177e4
LT
219};
220
b2410e92 221static struct ctl_table xfs_root_table[] = {
3a68cbfe 222 {
3a68cbfe
EB
223 .procname = "fs",
224 .mode = 0555,
225 .child = xfs_dir_table
226 },
227 {}
1da177e4
LT
228};
229
9f8868ff 230int
1da177e4
LT
231xfs_sysctl_register(void)
232{
0b4d4147 233 xfs_table_header = register_sysctl_table(xfs_root_table);
9f8868ff
CH
234 if (!xfs_table_header)
235 return -ENOMEM;
236 return 0;
1da177e4
LT
237}
238
239void
240xfs_sysctl_unregister(void)
241{
9f8868ff 242 unregister_sysctl_table(xfs_table_header);
1da177e4 243}
This page took 0.709921 seconds and 5 git commands to generate.