at v5.7 3.9 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * V9FS cache definitions. 4 * 5 * Copyright (C) 2009 by Abhishek Kulkarni <adkulkar@umail.iu.edu> 6 */ 7 8#ifndef _9P_CACHE_H 9#define _9P_CACHE_H 10#ifdef CONFIG_9P_FSCACHE 11#include <linux/fscache.h> 12#include <linux/spinlock.h> 13 14extern struct fscache_netfs v9fs_cache_netfs; 15extern const struct fscache_cookie_def v9fs_cache_session_index_def; 16extern const struct fscache_cookie_def v9fs_cache_inode_index_def; 17 18extern void v9fs_cache_session_get_cookie(struct v9fs_session_info *v9ses); 19extern void v9fs_cache_session_put_cookie(struct v9fs_session_info *v9ses); 20 21extern void v9fs_cache_inode_get_cookie(struct inode *inode); 22extern void v9fs_cache_inode_put_cookie(struct inode *inode); 23extern void v9fs_cache_inode_flush_cookie(struct inode *inode); 24extern void v9fs_cache_inode_set_cookie(struct inode *inode, struct file *filp); 25extern void v9fs_cache_inode_reset_cookie(struct inode *inode); 26 27extern int __v9fs_cache_register(void); 28extern void __v9fs_cache_unregister(void); 29 30extern int __v9fs_fscache_release_page(struct page *page, gfp_t gfp); 31extern void __v9fs_fscache_invalidate_page(struct page *page); 32extern int __v9fs_readpage_from_fscache(struct inode *inode, 33 struct page *page); 34extern int __v9fs_readpages_from_fscache(struct inode *inode, 35 struct address_space *mapping, 36 struct list_head *pages, 37 unsigned *nr_pages); 38extern void __v9fs_readpage_to_fscache(struct inode *inode, struct page *page); 39extern void __v9fs_fscache_wait_on_page_write(struct inode *inode, 40 struct page *page); 41 42static inline int v9fs_fscache_release_page(struct page *page, 43 gfp_t gfp) 44{ 45 return __v9fs_fscache_release_page(page, gfp); 46} 47 48static inline void v9fs_fscache_invalidate_page(struct page *page) 49{ 50 __v9fs_fscache_invalidate_page(page); 51} 52 53static inline int v9fs_readpage_from_fscache(struct inode *inode, 54 struct page *page) 55{ 56 return __v9fs_readpage_from_fscache(inode, page); 57} 58 59static inline int v9fs_readpages_from_fscache(struct inode *inode, 60 struct address_space *mapping, 61 struct list_head *pages, 62 unsigned *nr_pages) 63{ 64 return __v9fs_readpages_from_fscache(inode, mapping, pages, 65 nr_pages); 66} 67 68static inline void v9fs_readpage_to_fscache(struct inode *inode, 69 struct page *page) 70{ 71 if (PageFsCache(page)) 72 __v9fs_readpage_to_fscache(inode, page); 73} 74 75static inline void v9fs_uncache_page(struct inode *inode, struct page *page) 76{ 77 struct v9fs_inode *v9inode = V9FS_I(inode); 78 fscache_uncache_page(v9inode->fscache, page); 79 BUG_ON(PageFsCache(page)); 80} 81 82static inline void v9fs_fscache_wait_on_page_write(struct inode *inode, 83 struct page *page) 84{ 85 return __v9fs_fscache_wait_on_page_write(inode, page); 86} 87 88#else /* CONFIG_9P_FSCACHE */ 89 90static inline void v9fs_cache_inode_get_cookie(struct inode *inode) 91{ 92} 93 94static inline void v9fs_cache_inode_put_cookie(struct inode *inode) 95{ 96} 97 98static inline void v9fs_cache_inode_set_cookie(struct inode *inode, struct file *file) 99{ 100} 101 102static inline int v9fs_fscache_release_page(struct page *page, 103 gfp_t gfp) { 104 return 1; 105} 106 107static inline void v9fs_fscache_invalidate_page(struct page *page) {} 108 109static inline int v9fs_readpage_from_fscache(struct inode *inode, 110 struct page *page) 111{ 112 return -ENOBUFS; 113} 114 115static inline int v9fs_readpages_from_fscache(struct inode *inode, 116 struct address_space *mapping, 117 struct list_head *pages, 118 unsigned *nr_pages) 119{ 120 return -ENOBUFS; 121} 122 123static inline void v9fs_readpage_to_fscache(struct inode *inode, 124 struct page *page) 125{} 126 127static inline void v9fs_uncache_page(struct inode *inode, struct page *page) 128{} 129 130static inline void v9fs_fscache_wait_on_page_write(struct inode *inode, 131 struct page *page) 132{ 133 return; 134} 135 136#endif /* CONFIG_9P_FSCACHE */ 137#endif /* _9P_CACHE_H */