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); 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 { 93 return 0; 94 } 95 96 static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc) 97 { 98 } 99 100 static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci) 101 { 102 } 103 104 static inline void ceph_fscache_register_inode_cookie(struct inode *inode) 105 { 106 } 107 108 static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci) 109 { 110 } 111 112 static inline void ceph_fscache_file_set_cookie(struct inode *inode, 113 struct file *filp) 114 { 115 } 116 117 static inline void ceph_fscache_revalidate_cookie(struct ceph_inode_info *ci) 118 { 119 } 120 121 static inline void ceph_fscache_uncache_page(struct inode *inode, 122 struct page *pages) 123 { 124 } 125 126 static inline int ceph_readpage_from_fscache(struct inode* inode, 127 struct page *page) 128 { 129 return -ENOBUFS; 130 } 131 132 static inline int ceph_readpages_from_fscache(struct inode *inode, 133 struct address_space *mapping, 134 struct list_head *pages, 135 unsigned *nr_pages) 136 { 137 return -ENOBUFS; 138 } 139 140 static inline void ceph_readpage_to_fscache(struct inode *inode, 141 struct page *page) 142 { 143 } 144 145 static inline void ceph_fscache_invalidate(struct inode *inode) 146 { 147 } 148 149 static inline void ceph_invalidate_fscache_page(struct inode *inode, 150 struct page *page) 151 { 152 } 153 154 static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp) 155 { 156 return 1; 157 } 158 159 static inline void ceph_fscache_readpage_cancel(struct inode *inode, 160 struct page *page) 161 { 162 } 163 164 static inline void ceph_fscache_readpages_cancel(struct inode *inode, 165 struct list_head *pages) 166 { 167 } 168 169 static inline void ceph_disable_fscache_readpage(struct ceph_inode_info *ci) 170 { 171 } 172 173 #endif 174 175 #endif 176