2005-04-17 02:20:36 +04:00
/*
2005-11-02 06:58:39 +03:00
* Copyright ( c ) 2001 - 2005 Silicon Graphics , Inc .
* All Rights Reserved .
2005-04-17 02:20:36 +04:00
*
2005-11-02 06:58:39 +03:00
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
2005-04-17 02:20:36 +04:00
* published by the Free Software Foundation .
*
2005-11-02 06:58:39 +03:00
* 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 .
2005-04-17 02:20:36 +04:00
*
2005-11-02 06:58:39 +03:00
* 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
2005-04-17 02:20:36 +04:00
*/
# include "xfs.h"
# include <linux/sysctl.h>
# include <linux/proc_fs.h>
2011-01-12 03:35:42 +03:00
# include "xfs_error.h"
2005-04-17 02:20:36 +04:00
static struct ctl_table_header * xfs_table_header ;
# ifdef CONFIG_PROC_FS
STATIC int
xfs_stats_clear_proc_handler (
ctl_table * ctl ,
int write ,
void __user * buffer ,
size_t * lenp ,
loff_t * ppos )
{
int c , ret , * valp = ctl - > data ;
__uint32_t vn_active ;
2009-09-24 02:57:19 +04:00
ret = proc_dointvec_minmax ( ctl , write , buffer , lenp , ppos ) ;
2005-04-17 02:20:36 +04:00
if ( ! ret & & write & & * valp ) {
2011-03-07 02:00:35 +03:00
xfs_notice ( NULL , " Clearing xfsstats " ) ;
2006-06-23 13:03:00 +04:00
for_each_possible_cpu ( c ) {
2005-04-17 02:20:36 +04:00
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 ;
}
2011-01-12 03:35:42 +03:00
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 ;
}
2005-04-17 02:20:36 +04:00
# endif /* CONFIG_PROC_FS */
2007-02-10 10:34:56 +03:00
static ctl_table xfs_table [ ] = {
2007-02-10 10:36:59 +03:00
{
. procname = " irix_sgid_inherit " ,
. data = & xfs_params . sgid_inherit . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . sgid_inherit . min ,
. extra2 = & xfs_params . sgid_inherit . max
} ,
{
. procname = " irix_symlink_mode " ,
. data = & xfs_params . symlink_mode . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . symlink_mode . min ,
. extra2 = & xfs_params . symlink_mode . max
} ,
{
. procname = " panic_mask " ,
. data = & xfs_params . panic_mask . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2011-01-12 03:35:42 +03:00
. proc_handler = xfs_panic_mask_proc_handler ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . panic_mask . min ,
. extra2 = & xfs_params . panic_mask . max
} ,
2006-06-09 08:54:19 +04:00
2007-02-10 10:36:59 +03:00
{
. procname = " error_level " ,
. data = & xfs_params . error_level . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . error_level . min ,
. extra2 = & xfs_params . error_level . max
} ,
{
. procname = " xfssyncd_centisecs " ,
. data = & xfs_params . syncd_timer . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . syncd_timer . min ,
. extra2 = & xfs_params . syncd_timer . max
} ,
{
. procname = " inherit_sync " ,
. data = & xfs_params . inherit_sync . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . inherit_sync . min ,
. extra2 = & xfs_params . inherit_sync . max
} ,
{
. procname = " inherit_nodump " ,
. data = & xfs_params . inherit_nodump . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . inherit_nodump . min ,
. extra2 = & xfs_params . inherit_nodump . max
} ,
{
. procname = " inherit_noatime " ,
. data = & xfs_params . inherit_noatim . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . inherit_noatim . min ,
. extra2 = & xfs_params . inherit_noatim . max
} ,
{
. procname = " xfsbufd_centisecs " ,
. data = & xfs_params . xfs_buf_timer . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . xfs_buf_timer . min ,
. extra2 = & xfs_params . xfs_buf_timer . max
} ,
{
. procname = " age_buffer_centisecs " ,
. data = & xfs_params . xfs_buf_age . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . xfs_buf_age . min ,
. extra2 = & xfs_params . xfs_buf_age . max
} ,
{
. procname = " inherit_nosymlinks " ,
. data = & xfs_params . inherit_nosym . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . inherit_nosym . min ,
. extra2 = & xfs_params . inherit_nosym . max
} ,
{
. procname = " rotorstep " ,
. data = & xfs_params . rotorstep . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . rotorstep . min ,
. extra2 = & xfs_params . rotorstep . max
} ,
{
. procname = " inherit_nodefrag " ,
. data = & xfs_params . inherit_nodfrg . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . inherit_nodfrg . min ,
. extra2 = & xfs_params . inherit_nodfrg . max
} ,
2007-07-11 05:09:12 +04:00
{
. procname = " filestream_centisecs " ,
. data = & xfs_params . fstrm_timer . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = proc_dointvec_minmax ,
2007-07-11 05:09:12 +04:00
. extra1 = & xfs_params . fstrm_timer . min ,
. extra2 = & xfs_params . fstrm_timer . max ,
} ,
2012-11-06 18:50:47 +04:00
{
. procname = " speculative_prealloc_lifetime " ,
. data = & xfs_params . eofb_timer . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec_minmax ,
. extra1 = & xfs_params . eofb_timer . min ,
. extra2 = & xfs_params . eofb_timer . max ,
} ,
2005-04-17 02:20:36 +04:00
/* please keep this the last entry */
# ifdef CONFIG_PROC_FS
2007-02-10 10:36:59 +03:00
{
. procname = " stats_clear " ,
. data = & xfs_params . stats_clear . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
2009-11-16 14:11:48 +03:00
. proc_handler = xfs_stats_clear_proc_handler ,
2007-02-10 10:36:59 +03:00
. extra1 = & xfs_params . stats_clear . min ,
. extra2 = & xfs_params . stats_clear . max
} ,
2005-04-17 02:20:36 +04:00
# endif /* CONFIG_PROC_FS */
2007-02-10 10:36:59 +03:00
{ }
2005-04-17 02:20:36 +04:00
} ;
2007-02-10 10:34:56 +03:00
static ctl_table xfs_dir_table [ ] = {
2007-02-10 10:36:59 +03:00
{
. procname = " xfs " ,
. mode = 0555 ,
. child = xfs_table
} ,
{ }
2005-04-17 02:20:36 +04:00
} ;
2007-02-10 10:34:56 +03:00
static ctl_table xfs_root_table [ ] = {
2007-02-10 10:36:59 +03:00
{
. procname = " fs " ,
. mode = 0555 ,
. child = xfs_dir_table
} ,
{ }
2005-04-17 02:20:36 +04:00
} ;
2008-07-18 11:11:46 +04:00
int
2005-04-17 02:20:36 +04:00
xfs_sysctl_register ( void )
{
2007-02-14 11:34:09 +03:00
xfs_table_header = register_sysctl_table ( xfs_root_table ) ;
2008-07-18 11:11:46 +04:00
if ( ! xfs_table_header )
return - ENOMEM ;
return 0 ;
2005-04-17 02:20:36 +04:00
}
void
xfs_sysctl_unregister ( void )
{
2008-07-18 11:11:46 +04:00
unregister_sysctl_table ( xfs_table_header ) ;
2005-04-17 02:20:36 +04:00
}