2010-07-05 16:41:50 +04:00
/*
* fs / cifs / fscache . h - CIFS filesystem cache interface definitions
*
* Copyright ( c ) 2010 Novell , Inc .
* Authors ( s ) : Suresh Jayaraman ( sjayaraman @ suse . de >
*
* This library is free software ; you can redistribute it and / or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation ; either version 2.1 of the License , or
* ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See
* the GNU Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*/
# ifndef _CIFS_FSCACHE_H
# define _CIFS_FSCACHE_H
# include <linux/fscache.h>
2010-07-05 16:42:15 +04:00
# include "cifsglob.h"
2010-07-05 16:41:50 +04:00
# ifdef CONFIG_CIFS_FSCACHE
extern struct fscache_netfs cifs_fscache_netfs ;
2010-07-05 16:42:15 +04:00
extern const struct fscache_cookie_def cifs_fscache_server_index_def ;
2010-07-05 16:42:27 +04:00
extern const struct fscache_cookie_def cifs_fscache_super_index_def ;
2010-07-05 16:42:45 +04:00
extern const struct fscache_cookie_def cifs_fscache_inode_object_def ;
2010-07-05 16:41:50 +04:00
extern int cifs_fscache_register ( void ) ;
extern void cifs_fscache_unregister ( void ) ;
2010-07-05 16:42:15 +04:00
/*
* fscache . c
*/
extern void cifs_fscache_get_client_cookie ( struct TCP_Server_Info * ) ;
extern void cifs_fscache_release_client_cookie ( struct TCP_Server_Info * ) ;
2011-05-27 08:34:02 +04:00
extern void cifs_fscache_get_super_cookie ( struct cifs_tcon * ) ;
extern void cifs_fscache_release_super_cookie ( struct cifs_tcon * ) ;
2010-07-05 16:42:15 +04:00
2010-07-05 16:42:45 +04:00
extern void cifs_fscache_release_inode_cookie ( struct inode * ) ;
extern void cifs_fscache_set_inode_cookie ( struct inode * , struct file * ) ;
extern void cifs_fscache_reset_inode_cookie ( struct inode * ) ;
2010-07-05 16:43:00 +04:00
extern void __cifs_fscache_invalidate_page ( struct page * , struct inode * ) ;
extern int cifs_fscache_release_page ( struct page * page , gfp_t gfp ) ;
2010-07-05 16:43:25 +04:00
extern int __cifs_readpage_from_fscache ( struct inode * , struct page * ) ;
extern int __cifs_readpages_from_fscache ( struct inode * ,
struct address_space * ,
struct list_head * ,
unsigned * ) ;
2013-09-04 21:10:39 +04:00
extern void __cifs_fscache_readpages_cancel ( struct inode * , struct list_head * ) ;
2010-07-05 16:43:00 +04:00
2010-07-05 16:43:11 +04:00
extern void __cifs_readpage_to_fscache ( struct inode * , struct page * ) ;
2010-07-05 16:43:00 +04:00
static inline void cifs_fscache_invalidate_page ( struct page * page ,
struct inode * inode )
{
if ( PageFsCache ( page ) )
__cifs_fscache_invalidate_page ( page , inode ) ;
}
2010-07-05 16:43:25 +04:00
static inline int cifs_readpage_from_fscache ( struct inode * inode ,
struct page * page )
{
if ( CIFS_I ( inode ) - > fscache )
return __cifs_readpage_from_fscache ( inode , page ) ;
return - ENOBUFS ;
}
static inline int cifs_readpages_from_fscache ( struct inode * inode ,
struct address_space * mapping ,
struct list_head * pages ,
unsigned * nr_pages )
{
if ( CIFS_I ( inode ) - > fscache )
return __cifs_readpages_from_fscache ( inode , mapping , pages ,
nr_pages ) ;
return - ENOBUFS ;
}
2010-07-05 16:43:11 +04:00
static inline void cifs_readpage_to_fscache ( struct inode * inode ,
struct page * page )
{
if ( PageFsCache ( page ) )
__cifs_readpage_to_fscache ( inode , page ) ;
}
2013-09-04 21:10:39 +04:00
static inline void cifs_fscache_readpages_cancel ( struct inode * inode ,
struct list_head * pages )
{
if ( CIFS_I ( inode ) - > fscache )
return __cifs_fscache_readpages_cancel ( inode , pages ) ;
}
2010-07-05 16:41:50 +04:00
# else /* CONFIG_CIFS_FSCACHE */
static inline int cifs_fscache_register ( void ) { return 0 ; }
static inline void cifs_fscache_unregister ( void ) { }
2010-07-05 16:42:15 +04:00
static inline void
cifs_fscache_get_client_cookie ( struct TCP_Server_Info * server ) { }
static inline void
2010-07-16 08:18:36 +04:00
cifs_fscache_release_client_cookie ( struct TCP_Server_Info * server ) { }
2011-05-27 08:34:02 +04:00
static inline void cifs_fscache_get_super_cookie ( struct cifs_tcon * tcon ) { }
2010-07-05 16:42:27 +04:00
static inline void
2011-05-27 08:34:02 +04:00
cifs_fscache_release_super_cookie ( struct cifs_tcon * tcon ) { }
2010-07-05 16:42:15 +04:00
2010-07-05 16:42:45 +04:00
static inline void cifs_fscache_release_inode_cookie ( struct inode * inode ) { }
static inline void cifs_fscache_set_inode_cookie ( struct inode * inode ,
struct file * filp ) { }
static inline void cifs_fscache_reset_inode_cookie ( struct inode * inode ) { }
2010-07-16 08:24:54 +04:00
static inline int cifs_fscache_release_page ( struct page * page , gfp_t gfp )
2010-07-05 16:43:00 +04:00
{
return 1 ; /* May release page */
}
2010-07-05 16:42:45 +04:00
2010-07-16 08:24:54 +04:00
static inline void cifs_fscache_invalidate_page ( struct page * page ,
struct inode * inode ) { }
2010-07-05 16:43:25 +04:00
static inline int
cifs_readpage_from_fscache ( struct inode * inode , struct page * page )
{
return - ENOBUFS ;
}
static inline int cifs_readpages_from_fscache ( struct inode * inode ,
struct address_space * mapping ,
struct list_head * pages ,
unsigned * nr_pages )
{
return - ENOBUFS ;
}
2010-07-05 16:43:11 +04:00
static inline void cifs_readpage_to_fscache ( struct inode * inode ,
struct page * page ) { }
2010-07-05 16:42:45 +04:00
2013-09-04 21:10:39 +04:00
static inline void cifs_fscache_readpages_cancel ( struct inode * inode ,
struct list_head * pages )
{
}
2010-07-05 16:41:50 +04:00
# endif /* CONFIG_CIFS_FSCACHE */
# endif /* _CIFS_FSCACHE_H */