2018-06-06 05:42:14 +03:00
// SPDX-License-Identifier: GPL-2.0
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
*/
# include "xfs.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 (
2013-06-14 06:37:50 +04:00
struct ctl_table * ctl ,
int write ,
2020-04-24 09:43:38 +03:00
void * buffer ,
2013-06-14 06:37:50 +04:00
size_t * lenp ,
loff_t * ppos )
2005-04-17 02:20:36 +04:00
{
2015-10-11 21:15:45 +03:00
int ret , * valp = ctl - > data ;
2005-04-17 02:20:36 +04:00
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 ) {
2015-10-11 21:19:45 +03:00
xfs_stats_clearall ( xfsstats . xs_stats ) ;
2005-04-17 02:20:36 +04:00
xfs_stats_clear = 0 ;
}
return ret ;
}
2011-01-12 03:35:42 +03:00
STATIC int
xfs_panic_mask_proc_handler (
2013-06-14 06:37:50 +04:00
struct ctl_table * ctl ,
int write ,
2020-04-24 09:43:38 +03:00
void * buffer ,
2013-06-14 06:37:50 +04:00
size_t * lenp ,
loff_t * ppos )
2011-01-12 03:35:42 +03:00
{
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 */
2020-09-25 21:11:37 +03:00
STATIC int
2021-02-12 20:14:47 +03:00
xfs_deprecated_dointvec_minmax (
2020-09-25 21:11:37 +03:00
struct ctl_table * ctl ,
int write ,
void * buffer ,
size_t * lenp ,
loff_t * ppos )
{
if ( write ) {
2021-02-12 20:14:47 +03:00
printk_ratelimited ( KERN_WARNING
" XFS: %s sysctl option is deprecated. \n " ,
2020-09-25 21:11:37 +03:00
ctl - > procname ) ;
}
return proc_dointvec_minmax ( ctl , write , buffer , lenp , ppos ) ;
}
2013-06-14 06:37:50 +04:00
static struct 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 ,
2021-02-12 20:14:47 +03:00
. proc_handler = xfs_deprecated_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 ,
2021-02-12 20:14:47 +03:00
. proc_handler = xfs_deprecated_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 = " 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 " ,
2021-01-23 03:48:43 +03:00
. data = & xfs_params . blockgc_timer . val ,
2012-11-06 18:50:47 +04:00
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = proc_dointvec_minmax ,
2021-01-23 03:48:43 +03:00
. extra1 = & xfs_params . blockgc_timer . min ,
. extra2 = & xfs_params . blockgc_timer . max ,
2016-10-03 19:11:46 +03:00
} ,
2021-02-12 20:14:47 +03:00
{
. procname = " speculative_cow_prealloc_lifetime " ,
. data = & xfs_params . blockgc_timer . val ,
. maxlen = sizeof ( int ) ,
. mode = 0644 ,
. proc_handler = xfs_deprecated_dointvec_minmax ,
. extra1 = & xfs_params . blockgc_timer . min ,
. extra2 = & xfs_params . blockgc_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
} ;
2013-06-14 06:37:50 +04:00
static struct 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
} ;
2013-06-14 06:37:50 +04:00
static struct 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
}