Blame view

fs/xfs/xfs_sysctl.c 6.13 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
7b7187698   Nathan Scott   [XFS] Update lice...
2
3
   * Copyright (c) 2001-2005 Silicon Graphics, Inc.
   * All Rights Reserved.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
4
   *
7b7187698   Nathan Scott   [XFS] Update lice...
5
6
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License as
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
7
8
   * published by the Free Software Foundation.
   *
7b7187698   Nathan Scott   [XFS] Update lice...
9
10
11
12
   * This program is distributed in the hope that it would be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
13
   *
7b7187698   Nathan Scott   [XFS] Update lice...
14
15
16
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write the Free Software Foundation,
   * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
17
   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
18
  #include "xfs.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
19
20
  #include <linux/sysctl.h>
  #include <linux/proc_fs.h>
73efe4a4d   Dave Chinner   xfs: prevent NMI ...
21
  #include "xfs_error.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
22

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
23
  static struct ctl_table_header *xfs_table_header;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
24
25
26
27
28
  #ifdef CONFIG_PROC_FS
  STATIC int
  xfs_stats_clear_proc_handler(
  	ctl_table	*ctl,
  	int		write,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
29
30
31
32
33
34
  	void		__user *buffer,
  	size_t		*lenp,
  	loff_t		*ppos)
  {
  	int		c, ret, *valp = ctl->data;
  	__uint32_t	vn_active;
8d65af789   Alexey Dobriyan   sysctl: remove "s...
35
  	ret = proc_dointvec_minmax(ctl, write, buffer, lenp, ppos);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
36
37
  
  	if (!ret && write && *valp) {
4f10700a2   Dave Chinner   xfs: Convert linu...
38
  		xfs_notice(NULL, "Clearing xfsstats");
6f0419e06   KAMEZAWA Hiroyuki   [PATCH] for_each_...
39
  		for_each_possible_cpu(c) {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
40
41
42
43
44
45
46
47
48
49
50
51
52
  			preempt_disable();
  			/* save vn_active, it's a universal truth! */
  			vn_active = per_cpu(xfsstats, c).vn_active;
  			memset(&per_cpu(xfsstats, c), 0,
  			       sizeof(struct xfsstats));
  			per_cpu(xfsstats, c).vn_active = vn_active;
  			preempt_enable();
  		}
  		xfs_stats_clear = 0;
  	}
  
  	return ret;
  }
73efe4a4d   Dave Chinner   xfs: prevent NMI ...
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
  
  STATIC int
  xfs_panic_mask_proc_handler(
  	ctl_table	*ctl,
  	int		write,
  	void		__user *buffer,
  	size_t		*lenp,
  	loff_t		*ppos)
  {
  	int		ret, *valp = ctl->data;
  
  	ret = proc_dointvec_minmax(ctl, write, buffer, lenp, ppos);
  	if (!ret && write) {
  		xfs_panic_mask = *valp;
  #ifdef DEBUG
  		xfs_panic_mask |= (XFS_PTAG_SHUTDOWN_CORRUPT | XFS_PTAG_LOGRES);
  #endif
  	}
  	return ret;
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
73
  #endif /* CONFIG_PROC_FS */
7989cb8ef   David Chinner   [XFS] Keep stack ...
74
  static ctl_table xfs_table[] = {
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
75
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
76
77
78
79
  		.procname	= "irix_sgid_inherit",
  		.data		= &xfs_params.sgid_inherit.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
80
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
81
82
83
84
  		.extra1		= &xfs_params.sgid_inherit.min,
  		.extra2		= &xfs_params.sgid_inherit.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
85
86
87
88
  		.procname	= "irix_symlink_mode",
  		.data		= &xfs_params.symlink_mode.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
89
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
90
91
92
93
  		.extra1		= &xfs_params.symlink_mode.min,
  		.extra2		= &xfs_params.symlink_mode.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
94
95
96
97
  		.procname	= "panic_mask",
  		.data		= &xfs_params.panic_mask.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
73efe4a4d   Dave Chinner   xfs: prevent NMI ...
98
  		.proc_handler	= xfs_panic_mask_proc_handler,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
99
100
101
  		.extra1		= &xfs_params.panic_mask.min,
  		.extra2		= &xfs_params.panic_mask.max
  	},
d3446eac3   Barry Naujok   [XFS] Add degfram...
102

3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
103
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
104
105
106
107
  		.procname	= "error_level",
  		.data		= &xfs_params.error_level.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
108
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
109
110
111
112
  		.extra1		= &xfs_params.error_level.min,
  		.extra2		= &xfs_params.error_level.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
113
114
115
116
  		.procname	= "xfssyncd_centisecs",
  		.data		= &xfs_params.syncd_timer.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
117
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
118
119
120
121
  		.extra1		= &xfs_params.syncd_timer.min,
  		.extra2		= &xfs_params.syncd_timer.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
122
123
124
125
  		.procname	= "inherit_sync",
  		.data		= &xfs_params.inherit_sync.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
126
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
127
128
129
130
  		.extra1		= &xfs_params.inherit_sync.min,
  		.extra2		= &xfs_params.inherit_sync.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
131
132
133
134
  		.procname	= "inherit_nodump",
  		.data		= &xfs_params.inherit_nodump.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
135
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
136
137
138
139
  		.extra1		= &xfs_params.inherit_nodump.min,
  		.extra2		= &xfs_params.inherit_nodump.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
140
141
142
143
  		.procname	= "inherit_noatime",
  		.data		= &xfs_params.inherit_noatim.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
144
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
145
146
147
148
  		.extra1		= &xfs_params.inherit_noatim.min,
  		.extra2		= &xfs_params.inherit_noatim.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
149
150
151
152
  		.procname	= "xfsbufd_centisecs",
  		.data		= &xfs_params.xfs_buf_timer.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
153
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
154
155
156
157
  		.extra1		= &xfs_params.xfs_buf_timer.min,
  		.extra2		= &xfs_params.xfs_buf_timer.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
158
159
160
161
  		.procname	= "age_buffer_centisecs",
  		.data		= &xfs_params.xfs_buf_age.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
162
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
163
164
165
166
  		.extra1		= &xfs_params.xfs_buf_age.min,
  		.extra2		= &xfs_params.xfs_buf_age.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
167
168
169
170
  		.procname	= "inherit_nosymlinks",
  		.data		= &xfs_params.inherit_nosym.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
171
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
172
173
174
175
  		.extra1		= &xfs_params.inherit_nosym.min,
  		.extra2		= &xfs_params.inherit_nosym.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
176
177
178
179
  		.procname	= "rotorstep",
  		.data		= &xfs_params.rotorstep.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
180
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
181
182
183
184
  		.extra1		= &xfs_params.rotorstep.min,
  		.extra2		= &xfs_params.rotorstep.max
  	},
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
185
186
187
188
  		.procname	= "inherit_nodefrag",
  		.data		= &xfs_params.inherit_nodfrg.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
189
  		.proc_handler	= proc_dointvec_minmax,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
190
191
192
  		.extra1		= &xfs_params.inherit_nodfrg.min,
  		.extra2		= &xfs_params.inherit_nodfrg.max
  	},
2a82b8be8   David Chinner   [XFS] Concurrent ...
193
  	{
2a82b8be8   David Chinner   [XFS] Concurrent ...
194
195
196
197
  		.procname	= "filestream_centisecs",
  		.data		= &xfs_params.fstrm_timer.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
198
  		.proc_handler	= proc_dointvec_minmax,
2a82b8be8   David Chinner   [XFS] Concurrent ...
199
200
201
  		.extra1		= &xfs_params.fstrm_timer.min,
  		.extra2		= &xfs_params.fstrm_timer.max,
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
202
203
  	/* please keep this the last entry */
  #ifdef CONFIG_PROC_FS
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
204
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
205
206
207
208
  		.procname	= "stats_clear",
  		.data		= &xfs_params.stats_clear.val,
  		.maxlen		= sizeof(int),
  		.mode		= 0644,
6d4561110   Eric W. Biederman   sysctl: Drop & in...
209
  		.proc_handler	= xfs_stats_clear_proc_handler,
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
210
211
212
  		.extra1		= &xfs_params.stats_clear.min,
  		.extra2		= &xfs_params.stats_clear.max
  	},
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
213
  #endif /* CONFIG_PROC_FS */
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
214
  	{}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
215
  };
7989cb8ef   David Chinner   [XFS] Keep stack ...
216
  static ctl_table xfs_dir_table[] = {
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
217
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
218
219
220
221
222
  		.procname	= "xfs",
  		.mode		= 0555,
  		.child		= xfs_table
  	},
  	{}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
223
  };
7989cb8ef   David Chinner   [XFS] Keep stack ...
224
  static ctl_table xfs_root_table[] = {
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
225
  	{
3a68cbfe0   Eric W. Biederman   [XFS] XFS sysctl ...
226
227
228
229
230
  		.procname	= "fs",
  		.mode		= 0555,
  		.child		= xfs_dir_table
  	},
  	{}
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
231
  };
9f8868ffb   Christoph Hellwig   [XFS] streamline ...
232
  int
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
233
234
  xfs_sysctl_register(void)
  {
0b4d41471   Eric W. Biederman   [PATCH] sysctl: r...
235
  	xfs_table_header = register_sysctl_table(xfs_root_table);
9f8868ffb   Christoph Hellwig   [XFS] streamline ...
236
237
238
  	if (!xfs_table_header)
  		return -ENOMEM;
  	return 0;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
239
240
241
242
243
  }
  
  void
  xfs_sysctl_unregister(void)
  {
9f8868ffb   Christoph Hellwig   [XFS] streamline ...
244
  	unregister_sysctl_table(xfs_table_header);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
245
  }