2019-05-28 09:57:16 -07:00
/* SPDX-License-Identifier: GPL-2.0-only */
2009-09-23 13:00:27 -05:00
/*
* V9FS cache definitions .
*
* Copyright ( C ) 2009 by Abhishek Kulkarni < adkulkar @ umail . iu . edu >
*/
# ifndef _9P_CACHE_H
2015-10-07 20:15:21 -04:00
# define _9P_CACHE_H
2009-09-23 13:00:27 -05: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 17:03:56 +05:30
extern void __v9fs_fscache_wait_on_page_write ( struct inode * inode ,
struct page * page ) ;
2009-09-23 13:00:27 -05: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 17:04:02 +05:30
struct v9fs_inode * v9inode = V9FS_I ( inode ) ;
fscache_uncache_page ( v9inode - > fscache , page ) ;
2009-09-23 13:00:27 -05:00
BUG_ON ( PageFsCache ( page ) ) ;
}
2011-02-28 17:03:56 +05:30
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 13:00:27 -05:00
# else /* CONFIG_9P_FSCACHE */
2013-09-17 08: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 13:00:27 -05: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 17:03:56 +05:30
static inline void v9fs_fscache_wait_on_page_write ( struct inode * inode ,
struct page * page )
{
return ;
}
2009-09-23 13:00:27 -05:00
# endif /* CONFIG_9P_FSCACHE */
# endif /* _9P_CACHE_H */