2005-04-17 02:20:36 +04:00
/*
2005-11-02 06:59:41 +03:00
* Copyright ( c ) 2000 - 2003 Silicon Graphics , Inc .
* All Rights Reserved .
2005-04-17 02:20:36 +04:00
*
2005-11-02 06:59:41 +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:59:41 +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:59:41 +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 "xfs_fs.h"
2005-11-02 06:38:42 +03:00
# include "xfs_bit.h"
2005-04-17 02:20:36 +04:00
# include "xfs_log.h"
2005-11-02 06:38:42 +03:00
# include "xfs_inum.h"
2005-04-17 02:20:36 +04:00
# include "xfs_trans.h"
# include "xfs_sb.h"
2005-11-02 06:38:42 +03:00
# include "xfs_ag.h"
2005-04-17 02:20:36 +04:00
# include "xfs_alloc.h"
# include "xfs_quota.h"
# include "xfs_mount.h"
# include "xfs_bmap_btree.h"
# include "xfs_inode.h"
2005-11-02 06:38:42 +03:00
# include "xfs_itable.h"
2005-04-17 02:20:36 +04:00
# include "xfs_bmap.h"
# include "xfs_rtalloc.h"
# include "xfs_error.h"
# include "xfs_attr.h"
# include "xfs_buf_item.h"
# include "xfs_qm.h"
struct xqmstats xqmstats ;
2009-08-28 23:55:00 +04:00
static int xqm_proc_show ( struct seq_file * m , void * v )
2005-04-17 02:20:36 +04:00
{
/* maximum; incore; ratio free to inuse; freelist */
2009-08-28 23:55:00 +04:00
seq_printf ( m , " %d \t %d \t %d \t %u \n " ,
2012-02-01 17:57:20 +04:00
0 ,
2005-04-17 02:20:36 +04:00
xfs_Gqm ? atomic_read ( & xfs_Gqm - > qm_totaldquots ) : 0 ,
2012-02-01 17:57:20 +04:00
0 ,
2010-04-13 09:06:52 +04:00
xfs_Gqm ? xfs_Gqm - > qm_dqfrlist_cnt : 0 ) ;
2009-08-28 23:55:00 +04:00
return 0 ;
2005-04-17 02:20:36 +04:00
}
2009-08-28 23:55:00 +04:00
static int xqm_proc_open ( struct inode * inode , struct file * file )
2005-04-17 02:20:36 +04:00
{
2009-08-28 23:55:00 +04:00
return single_open ( file , xqm_proc_show , NULL ) ;
}
static const struct file_operations xqm_proc_fops = {
. owner = THIS_MODULE ,
. open = xqm_proc_open ,
. read = seq_read ,
. llseek = seq_lseek ,
. release = single_release ,
} ;
2005-04-17 02:20:36 +04:00
2009-08-28 23:55:00 +04:00
static int xqmstat_proc_show ( struct seq_file * m , void * v )
{
2005-04-17 02:20:36 +04:00
/* quota performance statistics */
2009-08-28 23:55:00 +04:00
seq_printf ( m , " qm %u %u %u %u %u %u %u %u \n " ,
2005-04-17 02:20:36 +04:00
xqmstats . xs_qm_dqreclaims ,
xqmstats . xs_qm_dqreclaim_misses ,
xqmstats . xs_qm_dquot_dups ,
xqmstats . xs_qm_dqcachemisses ,
xqmstats . xs_qm_dqcachehits ,
xqmstats . xs_qm_dqwants ,
xqmstats . xs_qm_dqshake_reclaims ,
xqmstats . xs_qm_dqinact_reclaims ) ;
2009-08-28 23:55:00 +04:00
return 0 ;
}
2005-04-17 02:20:36 +04:00
2009-08-28 23:55:00 +04:00
static int xqmstat_proc_open ( struct inode * inode , struct file * file )
{
return single_open ( file , xqmstat_proc_show , NULL ) ;
2005-04-17 02:20:36 +04:00
}
2009-08-28 23:55:00 +04:00
static const struct file_operations xqmstat_proc_fops = {
. owner = THIS_MODULE ,
. open = xqmstat_proc_open ,
. read = seq_read ,
. llseek = seq_lseek ,
. release = single_release ,
} ;
2005-04-17 02:20:36 +04:00
void
xfs_qm_init_procfs ( void )
{
2009-08-28 23:55:00 +04:00
proc_create ( " fs/xfs/xqmstat " , 0 , NULL , & xqmstat_proc_fops ) ;
proc_create ( " fs/xfs/xqm " , 0 , NULL , & xqm_proc_fops ) ;
2005-04-17 02:20:36 +04:00
}
void
xfs_qm_cleanup_procfs ( void )
{
remove_proc_entry ( " fs/xfs/xqm " , NULL ) ;
remove_proc_entry ( " fs/xfs/xqmstat " , NULL ) ;
}