1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Ceph cache definitions. 4 * 5 * Copyright (C) 2013 by Adfin Solutions, Inc. All Rights Reserved. 6 * Written by Milosz Tanski (milosz@adfin.com) 7 */ 8 9 #ifndef _CEPH_CACHE_H 10 #define _CEPH_CACHE_H 11 12 #ifdef CONFIG_CEPH_FSCACHE 13 14 extern struct fscache_netfs ceph_cache_netfs; 15 16 int ceph_fscache_register(void); 17 void ceph_fscache_unregister(void); 18 19 int ceph_fscache_register_fs(struct ceph_fs_client* fsc, struct fs_context *fc); 20 void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc); 21 22 void ceph_fscache_register_inode_cookie(struct inode *inode); 23 void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci); 24 void ceph_fscache_file_set_cookie(struct inode *inode, struct file *filp); 25 void ceph_fscache_revalidate_cookie(struct ceph_inode_info *ci); 26 27 int ceph_readpage_from_fscache(struct inode *inode, struct page *page); 28 int ceph_readpages_from_fscache(struct inode *inode, 29 struct address_space *mapping, 30 struct list_head *pages, 31 unsigned *nr_pages); 32 void ceph_readpage_to_fscache(struct inode *inode, struct page *page); 33 void ceph_invalidate_fscache_page(struct inode* inode, struct page *page); 34 35 static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci) 36 { 37 ci->fscache = NULL; 38 ci->i_fscache_gen = 0; 39 } 40 41 static inline void ceph_fscache_invalidate(struct inode *inode) 42 { 43 fscache_invalidate(ceph_inode(inode)->fscache); 44 } 45 46 static inline void ceph_fscache_uncache_page(struct inode *inode, 47 struct page *page) 48 { 49 struct ceph_inode_info *ci = ceph_inode(inode); 50 return fscache_uncache_page(ci->fscache, page); 51 } 52 53 static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp) 54 { 55 struct inode* inode = page->mapping->host; 56 struct ceph_inode_info *ci = ceph_inode(inode); 57 return fscache_maybe_release_page(ci->fscache, page, gfp); 58 } 59 60 static inline void ceph_fscache_readpage_cancel(struct inode *inode, 61 struct page *page) 62 { 63 struct ceph_inode_info *ci = ceph_inode(inode); 64 if (fscache_cookie_valid(ci->fscache) && PageFsCache(page)) 65 __fscache_uncache_page(ci->fscache, page); 66 } 67 68 static inline void ceph_fscache_readpages_cancel(struct inode *inode, 69 struct list_head *pages) 70 { 71 struct ceph_inode_info *ci = ceph_inode(inode); 72 return fscache_readpages_cancel(ci->fscache, pages); 73 } 74 75 static inline void ceph_disable_fscache_readpage(struct ceph_inode_info *ci) 76 { 77 ci->i_fscache_gen = ci->i_rdcache_gen - 1; 78 } 79 80 #else 81 82 static inline int ceph_fscache_register(void) 83 { 84 return 0; 85 } 86 87 static inline void ceph_fscache_unregister(void) 88 { 89 } 90 91 static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc, 92 struct fs_context *fc) 93 { 94 return 0; 95 } 96 97 static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc) 98 { 99 } 100 101 static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci) 102 { 103 } 104 105 static inline void ceph_fscache_register_inode_cookie(struct inode *inode) 106 { 107 } 108 109 static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci) 110 { 111 } 112 113 static inline void ceph_fscache_file_set_cookie(struct inode *inode, 114 struct file *filp) 115 { 116 } 117 118 static inline void ceph_fscache_revalidate_cookie(struct ceph_inode_info *ci) 119 { 120 } 121 122 static inline void ceph_fscache_uncache_page(struct inode *inode, 123 struct page *pages) 124 { 125 } 126 127 static inline int ceph_readpage_from_fscache(struct inode* inode, 128 struct page *page) 129 { 130 return -ENOBUFS; 131 } 132 133 static inline int ceph_readpages_from_fscache(struct inode *inode, 134 struct address_space *mapping, 135 struct list_head *pages, 136 unsigned *nr_pages) 137 { 138 return -ENOBUFS; 139 } 140 141 static inline void ceph_readpage_to_fscache(struct inode *inode, 142 struct page *page) 143 { 144 } 145 146 static inline void ceph_fscache_invalidate(struct inode *inode) 147 { 148 } 149 150 static inline void ceph_invalidate_fscache_page(struct inode *inode, 151 struct page *page) 152 { 153 } 154 155 static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp) 156 { 157 return 1; 158 } 159 160 static inline void ceph_fscache_readpage_cancel(struct inode *inode, 161 struct page *page) 162 { 163 } 164 165 static inline void ceph_fscache_readpages_cancel(struct inode *inode, 166 struct list_head *pages) 167 { 168 } 169 170 static inline void ceph_disable_fscache_readpage(struct ceph_inode_info *ci) 171 { 172 } 173 174 #endif 175 176 #endif 177