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 #include <linux/netfs.h> 13 14 #ifdef CONFIG_CEPH_FSCACHE 15 #include <linux/fscache.h> 16 17 int ceph_fscache_register_fs(struct ceph_fs_client* fsc, struct fs_context *fc); 18 void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc); 19 20 void ceph_fscache_register_inode_cookie(struct inode *inode); 21 void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci); 22 23 void ceph_fscache_use_cookie(struct inode *inode, bool will_modify); 24 void ceph_fscache_unuse_cookie(struct inode *inode, bool update); 25 26 void ceph_fscache_update(struct inode *inode); 27 void ceph_fscache_invalidate(struct inode *inode, bool dio_write); 28 29 static inline struct fscache_cookie *ceph_fscache_cookie(struct ceph_inode_info *ci) 30 { 31 return netfs_i_cookie(&ci->netfs); 32 } 33 34 static inline void ceph_fscache_resize(struct inode *inode, loff_t to) 35 { 36 struct ceph_inode_info *ci = ceph_inode(inode); 37 struct fscache_cookie *cookie = ceph_fscache_cookie(ci); 38 39 if (cookie) { 40 ceph_fscache_use_cookie(inode, true); 41 fscache_resize_cookie(cookie, to); 42 ceph_fscache_unuse_cookie(inode, true); 43 } 44 } 45 46 static inline int ceph_fscache_unpin_writeback(struct inode *inode, 47 struct writeback_control *wbc) 48 { 49 return netfs_unpin_writeback(inode, wbc); 50 } 51 52 #define ceph_fscache_dirty_folio netfs_dirty_folio 53 54 static inline bool ceph_is_cache_enabled(struct inode *inode) 55 { 56 return fscache_cookie_enabled(ceph_fscache_cookie(ceph_inode(inode))); 57 } 58 59 #else /* CONFIG_CEPH_FSCACHE */ 60 static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc, 61 struct fs_context *fc) 62 { 63 return 0; 64 } 65 66 static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc) 67 { 68 } 69 70 static inline void ceph_fscache_register_inode_cookie(struct inode *inode) 71 { 72 } 73 74 static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci) 75 { 76 } 77 78 static inline void ceph_fscache_use_cookie(struct inode *inode, bool will_modify) 79 { 80 } 81 82 static inline void ceph_fscache_unuse_cookie(struct inode *inode, bool update) 83 { 84 } 85 86 static inline void ceph_fscache_update(struct inode *inode) 87 { 88 } 89 90 static inline void ceph_fscache_invalidate(struct inode *inode, bool dio_write) 91 { 92 } 93 94 static inline struct fscache_cookie *ceph_fscache_cookie(struct ceph_inode_info *ci) 95 { 96 return NULL; 97 } 98 99 static inline void ceph_fscache_resize(struct inode *inode, loff_t to) 100 { 101 } 102 103 static inline int ceph_fscache_unpin_writeback(struct inode *inode, 104 struct writeback_control *wbc) 105 { 106 return 0; 107 } 108 109 #define ceph_fscache_dirty_folio filemap_dirty_folio 110 111 static inline bool ceph_is_cache_enabled(struct inode *inode) 112 { 113 return false; 114 } 115 #endif /* CONFIG_CEPH_FSCACHE */ 116 117 #endif 118