1 /* 2 * V9FS cache definitions. 3 * 4 * Copyright (C) 2009 by Abhishek Kulkarni <adkulkar@umail.iu.edu> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 8 * as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to: 17 * Free Software Foundation 18 * 51 Franklin Street, Fifth Floor 19 * Boston, MA 02111-1301 USA 20 * 21 */ 22 23 #ifndef _9P_CACHE_H 24 #ifdef CONFIG_9P_FSCACHE 25 #include <linux/fscache.h> 26 #include <linux/spinlock.h> 27 28 extern struct fscache_netfs v9fs_cache_netfs; 29 extern const struct fscache_cookie_def v9fs_cache_session_index_def; 30 extern const struct fscache_cookie_def v9fs_cache_inode_index_def; 31 32 extern void v9fs_cache_session_get_cookie(struct v9fs_session_info *v9ses); 33 extern void v9fs_cache_session_put_cookie(struct v9fs_session_info *v9ses); 34 35 extern void v9fs_cache_inode_get_cookie(struct inode *inode); 36 extern void v9fs_cache_inode_put_cookie(struct inode *inode); 37 extern void v9fs_cache_inode_flush_cookie(struct inode *inode); 38 extern void v9fs_cache_inode_set_cookie(struct inode *inode, struct file *filp); 39 extern void v9fs_cache_inode_reset_cookie(struct inode *inode); 40 41 extern int __v9fs_cache_register(void); 42 extern void __v9fs_cache_unregister(void); 43 44 extern int __v9fs_fscache_release_page(struct page *page, gfp_t gfp); 45 extern void __v9fs_fscache_invalidate_page(struct page *page); 46 extern int __v9fs_readpage_from_fscache(struct inode *inode, 47 struct page *page); 48 extern int __v9fs_readpages_from_fscache(struct inode *inode, 49 struct address_space *mapping, 50 struct list_head *pages, 51 unsigned *nr_pages); 52 extern void __v9fs_readpage_to_fscache(struct inode *inode, struct page *page); 53 extern void __v9fs_fscache_wait_on_page_write(struct inode *inode, 54 struct page *page); 55 56 static inline int v9fs_fscache_release_page(struct page *page, 57 gfp_t gfp) 58 { 59 return __v9fs_fscache_release_page(page, gfp); 60 } 61 62 static inline void v9fs_fscache_invalidate_page(struct page *page) 63 { 64 __v9fs_fscache_invalidate_page(page); 65 } 66 67 static inline int v9fs_readpage_from_fscache(struct inode *inode, 68 struct page *page) 69 { 70 return __v9fs_readpage_from_fscache(inode, page); 71 } 72 73 static inline int v9fs_readpages_from_fscache(struct inode *inode, 74 struct address_space *mapping, 75 struct list_head *pages, 76 unsigned *nr_pages) 77 { 78 return __v9fs_readpages_from_fscache(inode, mapping, pages, 79 nr_pages); 80 } 81 82 static inline void v9fs_readpage_to_fscache(struct inode *inode, 83 struct page *page) 84 { 85 if (PageFsCache(page)) 86 __v9fs_readpage_to_fscache(inode, page); 87 } 88 89 static inline void v9fs_uncache_page(struct inode *inode, struct page *page) 90 { 91 struct v9fs_inode *v9inode = V9FS_I(inode); 92 fscache_uncache_page(v9inode->fscache, page); 93 BUG_ON(PageFsCache(page)); 94 } 95 96 static inline void v9fs_fscache_set_key(struct inode *inode, 97 struct p9_qid *qid) 98 { 99 struct v9fs_inode *v9inode = V9FS_I(inode); 100 spin_lock(&v9inode->fscache_lock); 101 v9inode->fscache_key = qid; 102 spin_unlock(&v9inode->fscache_lock); 103 } 104 105 static inline void v9fs_fscache_wait_on_page_write(struct inode *inode, 106 struct page *page) 107 { 108 return __v9fs_fscache_wait_on_page_write(inode, page); 109 } 110 111 #else /* CONFIG_9P_FSCACHE */ 112 113 static inline int v9fs_fscache_release_page(struct page *page, 114 gfp_t gfp) { 115 return 1; 116 } 117 118 static inline void v9fs_fscache_invalidate_page(struct page *page) {} 119 120 static inline int v9fs_readpage_from_fscache(struct inode *inode, 121 struct page *page) 122 { 123 return -ENOBUFS; 124 } 125 126 static inline int v9fs_readpages_from_fscache(struct inode *inode, 127 struct address_space *mapping, 128 struct list_head *pages, 129 unsigned *nr_pages) 130 { 131 return -ENOBUFS; 132 } 133 134 static inline void v9fs_readpage_to_fscache(struct inode *inode, 135 struct page *page) 136 {} 137 138 static inline void v9fs_uncache_page(struct inode *inode, struct page *page) 139 {} 140 141 static inline void v9fs_fscache_wait_on_page_write(struct inode *inode, 142 struct page *page) 143 { 144 return; 145 } 146 147 #endif /* CONFIG_9P_FSCACHE */ 148 #endif /* _9P_CACHE_H */ 149