2006-03-20 21:44:13 +03:00
/*
* linux / fs / nfs / iostat . h
*
* Declarations for NFS client per - mount statistics
*
* Copyright ( C ) 2005 , 2006 Chuck Lever < cel @ netapp . com >
*
*/
# ifndef _NFS_IOSTAT
# define _NFS_IOSTAT
# include <linux/percpu.h>
# include <linux/cache.h>
2008-06-12 20:32:25 +04:00
# include <linux/nfs_iostat.h>
2006-03-20 21:44:13 +03:00
struct nfs_iostats {
unsigned long long bytes [ __NFSIOS_BYTESMAX ] ;
2009-04-03 19:42:43 +04:00
# ifdef CONFIG_NFS_FSCACHE
unsigned long long fscache [ __NFSIOS_FSCACHEMAX ] ;
# endif
2006-03-20 21:44:13 +03:00
unsigned long events [ __NFSIOS_COUNTSMAX ] ;
} ____cacheline_aligned ;
2008-06-12 00:42:05 +04:00
static inline void nfs_inc_server_stats ( const struct nfs_server * server ,
2008-06-12 20:32:25 +04:00
enum nfs_stat_eventcounters stat )
2006-03-20 21:44:13 +03:00
{
2009-10-03 14:48:22 +04:00
this_cpu_inc ( server - > io_stats - > events [ stat ] ) ;
2006-03-20 21:44:13 +03:00
}
2008-06-12 00:42:05 +04:00
static inline void nfs_inc_stats ( const struct inode * inode ,
2008-06-12 20:32:25 +04:00
enum nfs_stat_eventcounters stat )
2006-03-20 21:44:14 +03:00
{
nfs_inc_server_stats ( NFS_SERVER ( inode ) , stat ) ;
}
2008-06-12 00:42:05 +04:00
static inline void nfs_add_server_stats ( const struct nfs_server * server ,
2008-06-12 20:32:25 +04:00
enum nfs_stat_bytecounters stat ,
unsigned long addend )
2006-03-20 21:44:13 +03:00
{
2009-10-03 14:48:22 +04:00
this_cpu_add ( server - > io_stats - > bytes [ stat ] , addend ) ;
2006-03-20 21:44:13 +03:00
}
2008-06-12 00:42:05 +04:00
static inline void nfs_add_stats ( const struct inode * inode ,
2008-06-12 20:32:25 +04:00
enum nfs_stat_bytecounters stat ,
unsigned long addend )
2006-03-20 21:44:14 +03:00
{
nfs_add_server_stats ( NFS_SERVER ( inode ) , stat , addend ) ;
}
2009-04-03 19:42:43 +04:00
# ifdef CONFIG_NFS_FSCACHE
static inline void nfs_add_fscache_stats ( struct inode * inode ,
enum nfs_stat_fscachecounters stat ,
unsigned long addend )
{
2009-10-03 14:48:22 +04:00
this_cpu_add ( NFS_SERVER ( inode ) - > io_stats - > fscache [ stat ] , addend ) ;
2009-04-03 19:42:43 +04:00
}
# endif
2006-03-20 21:44:13 +03:00
static inline struct nfs_iostats * nfs_alloc_iostats ( void )
{
return alloc_percpu ( struct nfs_iostats ) ;
}
static inline void nfs_free_iostats ( struct nfs_iostats * stats )
{
2006-03-20 21:44:48 +03:00
if ( stats ! = NULL )
free_percpu ( stats ) ;
2006-03-20 21:44:13 +03:00
}
2008-06-12 20:32:25 +04:00
# endif /* _NFS_IOSTAT */