2019-05-28 19:57:16 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2009-09-23 22:00:27 +04:00
/*
* V9FS cache definitions .
*
* Copyright ( C ) 2009 by Abhishek Kulkarni < adkulkar @ umail . iu . edu >
*/
# ifndef _9P_CACHE_H
2015-10-08 03:15:21 +03:00
# define _9P_CACHE_H
2009-09-23 22:00:27 +04:00
# ifdef CONFIG_9P_FSCACHE
# include <linux/fscache.h>
# include <linux/spinlock.h>
extern struct fscache_netfs v9fs_cache_netfs ;
extern const struct fscache_cookie_def v9fs_cache_session_index_def ;
extern const struct fscache_cookie_def v9fs_cache_inode_index_def ;
extern void v9fs_cache_session_get_cookie ( struct v9fs_session_info * v9ses ) ;
extern void v9fs_cache_session_put_cookie ( struct v9fs_session_info * v9ses ) ;
extern void v9fs_cache_inode_get_cookie ( struct inode * inode ) ;
extern void v9fs_cache_inode_put_cookie ( struct inode * inode ) ;
extern void v9fs_cache_inode_flush_cookie ( struct inode * inode ) ;
extern void v9fs_cache_inode_set_cookie ( struct inode * inode , struct file * filp ) ;
extern void v9fs_cache_inode_reset_cookie ( struct inode * inode ) ;
extern int __v9fs_cache_register ( void ) ;
extern void __v9fs_cache_unregister ( void ) ;
extern int __v9fs_fscache_release_page ( struct page * page , gfp_t gfp ) ;
extern void __v9fs_fscache_invalidate_page ( struct page * page ) ;
extern int __v9fs_readpage_from_fscache ( struct inode * inode ,
struct page * page ) ;
extern int __v9fs_readpages_from_fscache ( struct inode * inode ,
struct address_space * mapping ,
struct list_head * pages ,
unsigned * nr_pages ) ;
extern void __v9fs_readpage_to_fscache ( struct inode * inode , struct page * page ) ;
2011-02-28 14:33:56 +03:00
extern void __v9fs_fscache_wait_on_page_write ( struct inode * inode ,
struct page * page ) ;
2009-09-23 22:00:27 +04:00
static inline int v9fs_fscache_release_page ( struct page * page ,
gfp_t gfp )
{
return __v9fs_fscache_release_page ( page , gfp ) ;
}
static inline void v9fs_fscache_invalidate_page ( struct page * page )
{
__v9fs_fscache_invalidate_page ( page ) ;
}
static inline int v9fs_readpage_from_fscache ( struct inode * inode ,
struct page * page )
{
return __v9fs_readpage_from_fscache ( inode , page ) ;
}
static inline int v9fs_readpages_from_fscache ( struct inode * inode ,
struct address_space * mapping ,
struct list_head * pages ,
unsigned * nr_pages )
{
return __v9fs_readpages_from_fscache ( inode , mapping , pages ,
nr_pages ) ;
}
static inline void v9fs_readpage_to_fscache ( struct inode * inode ,
struct page * page )
{
if ( PageFsCache ( page ) )
__v9fs_readpage_to_fscache ( inode , page ) ;
}
static inline void v9fs_uncache_page ( struct inode * inode , struct page * page )
{
2011-02-28 14:34:02 +03:00
struct v9fs_inode * v9inode = V9FS_I ( inode ) ;
fscache_uncache_page ( v9inode - > fscache , page ) ;
2009-09-23 22:00:27 +04:00
BUG_ON ( PageFsCache ( page ) ) ;
}
2011-02-28 14:33:56 +03:00
static inline void v9fs_fscache_wait_on_page_write ( struct inode * inode ,
struct page * page )
{
return __v9fs_fscache_wait_on_page_write ( inode , page ) ;
}
2009-09-23 22:00:27 +04:00
# else /* CONFIG_9P_FSCACHE */
2013-09-17 16:07:11 +04:00
static inline void v9fs_cache_inode_get_cookie ( struct inode * inode )
{
}
static inline void v9fs_cache_inode_put_cookie ( struct inode * inode )
{
}
static inline void v9fs_cache_inode_set_cookie ( struct inode * inode , struct file * file )
{
}
2009-09-23 22:00:27 +04:00
static inline int v9fs_fscache_release_page ( struct page * page ,
gfp_t gfp ) {
return 1 ;
}
static inline void v9fs_fscache_invalidate_page ( struct page * page ) { }
static inline int v9fs_readpage_from_fscache ( struct inode * inode ,
struct page * page )
{
return - ENOBUFS ;
}
static inline int v9fs_readpages_from_fscache ( struct inode * inode ,
struct address_space * mapping ,
struct list_head * pages ,
unsigned * nr_pages )
{
return - ENOBUFS ;
}
static inline void v9fs_readpage_to_fscache ( struct inode * inode ,
struct page * page )
{ }
static inline void v9fs_uncache_page ( struct inode * inode , struct page * page )
{ }
2011-02-28 14:33:56 +03:00
static inline void v9fs_fscache_wait_on_page_write ( struct inode * inode ,
struct page * page )
{
return ;
}
2009-09-23 22:00:27 +04:00
# endif /* CONFIG_9P_FSCACHE */
# endif /* _9P_CACHE_H */