2021-06-18 00:31:49 -05:00
/* SPDX-License-Identifier: LGPL-2.1 */
2010-07-05 18:11:50 +05:30
/*
2021-09-13 14:51:10 -05:00
* CIFS filesystem cache interface definitions
2010-07-05 18:11:50 +05:30
*
* Copyright ( c ) 2010 Novell , Inc .
* Authors ( s ) : Suresh Jayaraman ( sjayaraman @ suse . de >
*
*/
# ifndef _CIFS_FSCACHE_H
# define _CIFS_FSCACHE_H
# include <linux/fscache.h>
2010-07-05 18:12:15 +05:30
# include "cifsglob.h"
2010-07-05 18:11:50 +05:30
# ifdef CONFIG_CIFS_FSCACHE
2020-06-05 17:19:46 -05:00
/*
* Auxiliary data attached to CIFS superblock within the cache
*/
struct cifs_fscache_super_auxdata {
u64 resource_id ; /* unique server resource id */
__le64 vol_create_time ;
u32 vol_serial_number ;
} __packed ;
2018-04-04 13:41:28 +01:00
/*
* Auxiliary data attached to CIFS inode within the cache
*/
struct cifs_fscache_inode_auxdata {
2018-06-19 17:27:59 +02:00
u64 last_write_time_sec ;
u64 last_change_time_sec ;
u32 last_write_time_nsec ;
u32 last_change_time_nsec ;
u64 eof ;
2018-04-04 13:41:28 +01:00
} ;
/*
* cache . c
*/
2010-07-05 18:11:50 +05:30
extern struct fscache_netfs cifs_fscache_netfs ;
2010-07-05 18:12:15 +05:30
extern const struct fscache_cookie_def cifs_fscache_server_index_def ;
2010-07-05 18:12:27 +05:30
extern const struct fscache_cookie_def cifs_fscache_super_index_def ;
2010-07-05 18:12:45 +05:30
extern const struct fscache_cookie_def cifs_fscache_inode_object_def ;
2010-07-05 18:11:50 +05:30
extern int cifs_fscache_register ( void ) ;
extern void cifs_fscache_unregister ( void ) ;
2010-07-05 18:12:15 +05:30
/*
* 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 04:34:02 +00:00
extern void cifs_fscache_get_super_cookie ( struct cifs_tcon * ) ;
extern void cifs_fscache_release_super_cookie ( struct cifs_tcon * ) ;
2010-07-05 18:12:15 +05:30
2010-07-05 18:12:45 +05:30
extern void cifs_fscache_release_inode_cookie ( struct inode * ) ;
2021-08-10 10:22:28 +00:00
extern void cifs_fscache_update_inode_cookie ( struct inode * inode ) ;
2010-07-05 18:12:45 +05:30
extern void cifs_fscache_set_inode_cookie ( struct inode * , struct file * ) ;
extern void cifs_fscache_reset_inode_cookie ( struct inode * ) ;
2010-07-05 18:13:00 +05:30
extern void __cifs_fscache_invalidate_page ( struct page * , struct inode * ) ;
2021-08-10 10:22:28 +00:00
extern void __cifs_fscache_wait_on_page_write ( struct inode * inode , struct page * page ) ;
extern void __cifs_fscache_uncache_page ( struct inode * inode , struct page * page ) ;
2010-07-05 18:13:00 +05:30
extern int cifs_fscache_release_page ( struct page * page , gfp_t gfp ) ;
2010-07-05 18:13:25 +05:30
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 17:10:39 +00:00
extern void __cifs_fscache_readpages_cancel ( struct inode * , struct list_head * ) ;
2010-07-05 18:13:00 +05:30
2010-07-05 18:13:11 +05:30
extern void __cifs_readpage_to_fscache ( struct inode * , struct page * ) ;
2010-07-05 18:13:00 +05:30
static inline void cifs_fscache_invalidate_page ( struct page * page ,
struct inode * inode )
{
if ( PageFsCache ( page ) )
__cifs_fscache_invalidate_page ( page , inode ) ;
}
2021-08-10 10:22:28 +00:00
static inline void cifs_fscache_wait_on_page_write ( struct inode * inode ,
struct page * page )
{
if ( PageFsCache ( page ) )
__cifs_fscache_wait_on_page_write ( inode , page ) ;
}
static inline void cifs_fscache_uncache_page ( struct inode * inode ,
struct page * page )
{
if ( PageFsCache ( page ) )
__cifs_fscache_uncache_page ( inode , page ) ;
}
2010-07-05 18:13:25 +05:30
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 18:13:11 +05:30
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 17:10:39 +00: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 18:11:50 +05:30
# else /* CONFIG_CIFS_FSCACHE */
static inline int cifs_fscache_register ( void ) { return 0 ; }
static inline void cifs_fscache_unregister ( void ) { }
2010-07-05 18:12:15 +05:30
static inline void
cifs_fscache_get_client_cookie ( struct TCP_Server_Info * server ) { }
static inline void
2010-07-16 04:18:36 +00:00
cifs_fscache_release_client_cookie ( struct TCP_Server_Info * server ) { }
2011-05-27 04:34:02 +00:00
static inline void cifs_fscache_get_super_cookie ( struct cifs_tcon * tcon ) { }
2010-07-05 18:12:27 +05:30
static inline void
2011-05-27 04:34:02 +00:00
cifs_fscache_release_super_cookie ( struct cifs_tcon * tcon ) { }
2010-07-05 18:12:15 +05:30
2010-07-05 18:12:45 +05:30
static inline void cifs_fscache_release_inode_cookie ( struct inode * inode ) { }
2021-08-10 10:22:28 +00:00
static inline void cifs_fscache_update_inode_cookie ( struct inode * inode ) { }
2010-07-05 18:12:45 +05:30
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 04:24:54 +00:00
static inline int cifs_fscache_release_page ( struct page * page , gfp_t gfp )
2010-07-05 18:13:00 +05:30
{
return 1 ; /* May release page */
}
2010-07-05 18:12:45 +05:30
2010-07-16 04:24:54 +00:00
static inline void cifs_fscache_invalidate_page ( struct page * page ,
struct inode * inode ) { }
2021-08-10 10:22:28 +00:00
static inline void cifs_fscache_wait_on_page_write ( struct inode * inode ,
struct page * page ) { }
static inline void cifs_fscache_uncache_page ( struct inode * inode ,
struct page * page ) { }
2010-07-05 18:13:25 +05:30
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 18:13:11 +05:30
static inline void cifs_readpage_to_fscache ( struct inode * inode ,
struct page * page ) { }
2010-07-05 18:12:45 +05:30
2013-09-04 17:10:39 +00:00
static inline void cifs_fscache_readpages_cancel ( struct inode * inode ,
struct list_head * pages )
{
}
2010-07-05 18:11:50 +05:30
# endif /* CONFIG_CIFS_FSCACHE */
# endif /* _CIFS_FSCACHE_H */