2019-05-27 09:55:05 +03:00
// SPDX-License-Identifier: GPL-2.0-or-later
2005-04-17 02:20:36 +04:00
/*
* Copyright ( C ) International Business Machines Corp . , 2000 - 2004
* Portions Copyright ( C ) Christoph Hellwig , 2001 - 2002
*/
# include <linux/fs.h>
# include <linux/ctype.h>
# include <linux/module.h>
# include <linux/proc_fs.h>
2008-05-13 17:22:10 +04:00
# include <linux/seq_file.h>
2016-12-24 22:46:01 +03:00
# include <linux/uaccess.h>
2005-04-17 02:20:36 +04:00
# include "jfs_incore.h"
# include "jfs_filsys.h"
# include "jfs_debug.h"
# ifdef PROC_FS_JFS /* see jfs_debug.h */
# ifdef CONFIG_JFS_DEBUG
2008-05-13 17:22:10 +04:00
static int jfs_loglevel_proc_show ( struct seq_file * m , void * v )
2005-04-17 02:20:36 +04:00
{
2008-05-13 17:22:10 +04:00
seq_printf ( m , " %d \n " , jfsloglevel ) ;
return 0 ;
}
2005-04-17 02:20:36 +04:00
2008-05-13 17:22:10 +04:00
static int jfs_loglevel_proc_open ( struct inode * inode , struct file * file )
{
return single_open ( file , jfs_loglevel_proc_show , NULL ) ;
2005-04-17 02:20:36 +04:00
}
2008-05-13 17:22:10 +04:00
static ssize_t jfs_loglevel_proc_write ( struct file * file ,
const char __user * buffer , size_t count , loff_t * ppos )
2005-04-17 02:20:36 +04:00
{
char c ;
if ( get_user ( c , buffer ) )
return - EFAULT ;
/* yes, I know this is an ASCIIism. --hch */
if ( c < ' 0 ' | | c > ' 9 ' )
return - EINVAL ;
jfsloglevel = c - ' 0 ' ;
return count ;
}
2008-05-13 17:22:10 +04:00
2020-02-04 04:37:17 +03:00
static const struct proc_ops jfs_loglevel_proc_ops = {
. proc_open = jfs_loglevel_proc_open ,
. proc_read = seq_read ,
. proc_lseek = seq_lseek ,
. proc_release = single_release ,
. proc_write = jfs_loglevel_proc_write ,
2008-05-13 17:22:10 +04:00
} ;
2005-04-17 02:20:36 +04:00
# endif
void jfs_proc_init ( void )
{
2018-04-11 17:51:18 +03:00
struct proc_dir_entry * base ;
2005-04-17 02:20:36 +04:00
2018-04-11 17:51:18 +03:00
base = proc_mkdir ( " fs/jfs " , NULL ) ;
if ( ! base )
2005-04-17 02:20:36 +04:00
return ;
2018-04-11 17:51:18 +03:00
# ifdef CONFIG_JFS_STATISTICS
proc_create_single ( " lmstats " , 0 , base , jfs_lmstats_proc_show ) ;
proc_create_single ( " txstats " , 0 , base , jfs_txstats_proc_show ) ;
proc_create_single ( " xtstat " , 0 , base , jfs_xtstat_proc_show ) ;
proc_create_single ( " mpstat " , 0 , base , jfs_mpstat_proc_show ) ;
# endif
# ifdef CONFIG_JFS_DEBUG
proc_create_single ( " TxAnchor " , 0 , base , jfs_txanchor_proc_show ) ;
2020-02-04 04:37:17 +03:00
proc_create ( " loglevel " , 0 , base , & jfs_loglevel_proc_ops ) ;
2018-04-11 17:51:18 +03:00
# endif
2005-04-17 02:20:36 +04:00
}
void jfs_proc_clean ( void )
{
2018-04-11 17:51:18 +03:00
remove_proc_subtree ( " fs/jfs " , NULL ) ;
2005-04-17 02:20:36 +04:00
}
# endif /* PROC_FS_JFS */