mm/memunmap: don't access uninitialized memmap in memunmap_pages()
[linux-2.6-block.git] / fs / xfs / xfs_sysctl.c
CommitLineData
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
9static struct ctl_table_header *xfs_table_header;
10
1da177e4
LT
11#ifdef CONFIG_PROC_FS
12STATIC int
13xfs_stats_clear_proc_handler(
b2410e92
JP
14 struct ctl_table *ctl,
15 int write,
16 void __user *buffer,
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
32STATIC int
33xfs_panic_mask_proc_handler(
b2410e92
JP
34 struct ctl_table *ctl,
35 int write,
36 void __user *buffer,
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
b2410e92 53static struct ctl_table xfs_table[] = {
3a68cbfe 54 {
3a68cbfe
EB
55 .procname = "irix_sgid_inherit",
56 .data = &xfs_params.sgid_inherit.val,
57 .maxlen = sizeof(int),
58 .mode = 0644,
6d456111 59 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
60 .extra1 = &xfs_params.sgid_inherit.min,
61 .extra2 = &xfs_params.sgid_inherit.max
62 },
63 {
3a68cbfe
EB
64 .procname = "irix_symlink_mode",
65 .data = &xfs_params.symlink_mode.val,
66 .maxlen = sizeof(int),
67 .mode = 0644,
6d456111 68 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
69 .extra1 = &xfs_params.symlink_mode.min,
70 .extra2 = &xfs_params.symlink_mode.max
71 },
72 {
3a68cbfe
EB
73 .procname = "panic_mask",
74 .data = &xfs_params.panic_mask.val,
75 .maxlen = sizeof(int),
76 .mode = 0644,
73efe4a4 77 .proc_handler = xfs_panic_mask_proc_handler,
3a68cbfe
EB
78 .extra1 = &xfs_params.panic_mask.min,
79 .extra2 = &xfs_params.panic_mask.max
80 },
d3446eac 81
3a68cbfe 82 {
3a68cbfe
EB
83 .procname = "error_level",
84 .data = &xfs_params.error_level.val,
85 .maxlen = sizeof(int),
86 .mode = 0644,
6d456111 87 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
88 .extra1 = &xfs_params.error_level.min,
89 .extra2 = &xfs_params.error_level.max
90 },
91 {
3a68cbfe
EB
92 .procname = "xfssyncd_centisecs",
93 .data = &xfs_params.syncd_timer.val,
94 .maxlen = sizeof(int),
95 .mode = 0644,
6d456111 96 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
97 .extra1 = &xfs_params.syncd_timer.min,
98 .extra2 = &xfs_params.syncd_timer.max
99 },
100 {
3a68cbfe
EB
101 .procname = "inherit_sync",
102 .data = &xfs_params.inherit_sync.val,
103 .maxlen = sizeof(int),
104 .mode = 0644,
6d456111 105 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
106 .extra1 = &xfs_params.inherit_sync.min,
107 .extra2 = &xfs_params.inherit_sync.max
108 },
109 {
3a68cbfe
EB
110 .procname = "inherit_nodump",
111 .data = &xfs_params.inherit_nodump.val,
112 .maxlen = sizeof(int),
113 .mode = 0644,
6d456111 114 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
115 .extra1 = &xfs_params.inherit_nodump.min,
116 .extra2 = &xfs_params.inherit_nodump.max
117 },
118 {
3a68cbfe
EB
119 .procname = "inherit_noatime",
120 .data = &xfs_params.inherit_noatim.val,
121 .maxlen = sizeof(int),
122 .mode = 0644,
6d456111 123 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
124 .extra1 = &xfs_params.inherit_noatim.min,
125 .extra2 = &xfs_params.inherit_noatim.max
126 },
3a68cbfe 127 {
3a68cbfe
EB
128 .procname = "inherit_nosymlinks",
129 .data = &xfs_params.inherit_nosym.val,
130 .maxlen = sizeof(int),
131 .mode = 0644,
6d456111 132 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
133 .extra1 = &xfs_params.inherit_nosym.min,
134 .extra2 = &xfs_params.inherit_nosym.max
135 },
136 {
3a68cbfe
EB
137 .procname = "rotorstep",
138 .data = &xfs_params.rotorstep.val,
139 .maxlen = sizeof(int),
140 .mode = 0644,
6d456111 141 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
142 .extra1 = &xfs_params.rotorstep.min,
143 .extra2 = &xfs_params.rotorstep.max
144 },
145 {
3a68cbfe
EB
146 .procname = "inherit_nodefrag",
147 .data = &xfs_params.inherit_nodfrg.val,
148 .maxlen = sizeof(int),
149 .mode = 0644,
6d456111 150 .proc_handler = proc_dointvec_minmax,
3a68cbfe
EB
151 .extra1 = &xfs_params.inherit_nodfrg.min,
152 .extra2 = &xfs_params.inherit_nodfrg.max
153 },
2a82b8be 154 {
2a82b8be
DC
155 .procname = "filestream_centisecs",
156 .data = &xfs_params.fstrm_timer.val,
157 .maxlen = sizeof(int),
158 .mode = 0644,
6d456111 159 .proc_handler = proc_dointvec_minmax,
2a82b8be
DC
160 .extra1 = &xfs_params.fstrm_timer.min,
161 .extra2 = &xfs_params.fstrm_timer.max,
162 },
579b62fa
BF
163 {
164 .procname = "speculative_prealloc_lifetime",
165 .data = &xfs_params.eofb_timer.val,
166 .maxlen = sizeof(int),
167 .mode = 0644,
168 .proc_handler = proc_dointvec_minmax,
169 .extra1 = &xfs_params.eofb_timer.min,
170 .extra2 = &xfs_params.eofb_timer.max,
171 },
83104d44
DW
172 {
173 .procname = "speculative_cow_prealloc_lifetime",
174 .data = &xfs_params.cowb_timer.val,
175 .maxlen = sizeof(int),
176 .mode = 0644,
177 .proc_handler = proc_dointvec_minmax,
178 .extra1 = &xfs_params.cowb_timer.min,
179 .extra2 = &xfs_params.cowb_timer.max,
180 },
1da177e4
LT
181 /* please keep this the last entry */
182#ifdef CONFIG_PROC_FS
3a68cbfe 183 {
3a68cbfe
EB
184 .procname = "stats_clear",
185 .data = &xfs_params.stats_clear.val,
186 .maxlen = sizeof(int),
187 .mode = 0644,
6d456111 188 .proc_handler = xfs_stats_clear_proc_handler,
3a68cbfe
EB
189 .extra1 = &xfs_params.stats_clear.min,
190 .extra2 = &xfs_params.stats_clear.max
191 },
1da177e4
LT
192#endif /* CONFIG_PROC_FS */
193
3a68cbfe 194 {}
1da177e4
LT
195};
196
b2410e92 197static struct ctl_table xfs_dir_table[] = {
3a68cbfe 198 {
3a68cbfe
EB
199 .procname = "xfs",
200 .mode = 0555,
201 .child = xfs_table
202 },
203 {}
1da177e4
LT
204};
205
b2410e92 206static struct ctl_table xfs_root_table[] = {
3a68cbfe 207 {
3a68cbfe
EB
208 .procname = "fs",
209 .mode = 0555,
210 .child = xfs_dir_table
211 },
212 {}
1da177e4
LT
213};
214
9f8868ff 215int
1da177e4
LT
216xfs_sysctl_register(void)
217{
0b4d4147 218 xfs_table_header = register_sysctl_table(xfs_root_table);
9f8868ff
CH
219 if (!xfs_table_header)
220 return -ENOMEM;
221 return 0;
1da177e4
LT
222}
223
224void
225xfs_sysctl_unregister(void)
226{
9f8868ff 227 unregister_sysctl_table(xfs_table_header);
1da177e4 228}