b804f10947647996c22e0edefe25896d9be24995
[linux-2.6-microblaze.git] / fs / ceph / cache.h
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 void ceph_fscache_unpin_writeback(struct inode *inode,
47                                                 struct writeback_control *wbc)
48 {
49         fscache_unpin_writeback(wbc, ceph_fscache_cookie(ceph_inode(inode)));
50 }
51
52 static inline int ceph_fscache_dirty_folio(struct address_space *mapping,
53                 struct folio *folio)
54 {
55         struct ceph_inode_info *ci = ceph_inode(mapping->host);
56
57         return fscache_dirty_folio(mapping, folio, ceph_fscache_cookie(ci));
58 }
59
60 static inline bool ceph_is_cache_enabled(struct inode *inode)
61 {
62         return fscache_cookie_enabled(ceph_fscache_cookie(ceph_inode(inode)));
63 }
64
65 static inline void ceph_fscache_note_page_release(struct inode *inode)
66 {
67         struct ceph_inode_info *ci = ceph_inode(inode);
68
69         fscache_note_page_release(ceph_fscache_cookie(ci));
70 }
71 #else /* CONFIG_CEPH_FSCACHE */
72 static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc,
73                                            struct fs_context *fc)
74 {
75         return 0;
76 }
77
78 static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc)
79 {
80 }
81
82 static inline void ceph_fscache_register_inode_cookie(struct inode *inode)
83 {
84 }
85
86 static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci)
87 {
88 }
89
90 static inline void ceph_fscache_use_cookie(struct inode *inode, bool will_modify)
91 {
92 }
93
94 static inline void ceph_fscache_unuse_cookie(struct inode *inode, bool update)
95 {
96 }
97
98 static inline void ceph_fscache_update(struct inode *inode)
99 {
100 }
101
102 static inline void ceph_fscache_invalidate(struct inode *inode, bool dio_write)
103 {
104 }
105
106 static inline struct fscache_cookie *ceph_fscache_cookie(struct ceph_inode_info *ci)
107 {
108         return NULL;
109 }
110
111 static inline void ceph_fscache_resize(struct inode *inode, loff_t to)
112 {
113 }
114
115 static inline void ceph_fscache_unpin_writeback(struct inode *inode,
116                                                 struct writeback_control *wbc)
117 {
118 }
119
120 static inline int ceph_fscache_dirty_folio(struct address_space *mapping,
121                 struct folio *folio)
122 {
123         return filemap_dirty_folio(mapping, folio);
124 }
125
126 static inline bool ceph_is_cache_enabled(struct inode *inode)
127 {
128         return false;
129 }
130
131 static inline void ceph_fscache_note_page_release(struct inode *inode)
132 {
133 }
134 #endif /* CONFIG_CEPH_FSCACHE */
135
136 #endif