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 14extern struct fscache_netfs ceph_cache_netfs; 15 16int ceph_fscache_register(void); 17void ceph_fscache_unregister(void); 18 19int ceph_fscache_register_fs(struct ceph_fs_client* fsc, struct fs_context *fc); 20void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc); 21 22void ceph_fscache_register_inode_cookie(struct inode *inode); 23void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci); 24void ceph_fscache_file_set_cookie(struct inode *inode, struct file *filp); 25void ceph_fscache_revalidate_cookie(struct ceph_inode_info *ci); 26 27int ceph_readpage_from_fscache(struct inode *inode, struct page *page); 28int ceph_readpages_from_fscache(struct inode *inode, 29 struct address_space *mapping, 30 struct list_head *pages, 31 unsigned *nr_pages); 32void ceph_readpage_to_fscache(struct inode *inode, struct page *page); 33void ceph_invalidate_fscache_page(struct inode* inode, struct page *page); 34 35static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci) 36{ 37 ci->fscache = NULL; 38 ci->i_fscache_gen = 0; 39} 40 41static inline void ceph_fscache_invalidate(struct inode *inode) 42{ 43 fscache_invalidate(ceph_inode(inode)->fscache); 44} 45 46static 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 53static 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 60static 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 68static 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 75static 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 82static inline int ceph_fscache_register(void) 83{ 84 return 0; 85} 86 87static inline void ceph_fscache_unregister(void) 88{ 89} 90 91static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc, 92 struct fs_context *fc) 93{ 94 return 0; 95} 96 97static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc) 98{ 99} 100 101static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci) 102{ 103} 104 105static inline void ceph_fscache_register_inode_cookie(struct inode *inode) 106{ 107} 108 109static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci) 110{ 111} 112 113static inline void ceph_fscache_file_set_cookie(struct inode *inode, 114 struct file *filp) 115{ 116} 117 118static inline void ceph_fscache_revalidate_cookie(struct ceph_inode_info *ci) 119{ 120} 121 122static inline void ceph_fscache_uncache_page(struct inode *inode, 123 struct page *pages) 124{ 125} 126 127static inline int ceph_readpage_from_fscache(struct inode* inode, 128 struct page *page) 129{ 130 return -ENOBUFS; 131} 132 133static 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 141static inline void ceph_readpage_to_fscache(struct inode *inode, 142 struct page *page) 143{ 144} 145 146static inline void ceph_fscache_invalidate(struct inode *inode) 147{ 148} 149 150static inline void ceph_invalidate_fscache_page(struct inode *inode, 151 struct page *page) 152{ 153} 154 155static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp) 156{ 157 return 1; 158} 159 160static inline void ceph_fscache_readpage_cancel(struct inode *inode, 161 struct page *page) 162{ 163} 164 165static inline void ceph_fscache_readpages_cancel(struct inode *inode, 166 struct list_head *pages) 167{ 168} 169 170static inline void ceph_disable_fscache_readpage(struct ceph_inode_info *ci) 171{ 172} 173 174#endif 175 176#endif 177