Merge tag 'rust-6.4' of https://github.com/Rust-for-Linux/linux
[linux-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,
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
32STATIC int
33xfs_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 53STATIC int
89e0eb8c 54xfs_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 69static 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
9f8868ff 213int
1da177e4
LT
214xfs_sysctl_register(void)
215{
f5d2b92c 216 xfs_table_header = register_sysctl("fs/xfs", xfs_table);
9f8868ff
CH
217 if (!xfs_table_header)
218 return -ENOMEM;
219 return 0;
1da177e4
LT
220}
221
222void
223xfs_sysctl_unregister(void)
224{
9f8868ff 225 unregister_sysctl_table(xfs_table_header);
1da177e4 226}