Merge tag 'random-5.18-rc1-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[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 void ceph_fscache_inode_init(struct ceph_inode_info *ci)
30 {
31         ci->fscache = NULL;
32 }
33
34 static inline struct fscache_cookie *ceph_fscache_cookie(struct ceph_inode_info *ci)
35 {
36         return ci->fscache;
37 }
38
39 static inline void ceph_fscache_resize(struct inode *inode, loff_t to)
40 {
41         struct ceph_inode_info *ci = ceph_inode(inode);
42         struct fscache_cookie *cookie = ceph_fscache_cookie(ci);
43
44         if (cookie) {
45                 ceph_fscache_use_cookie(inode, true);
46                 fscache_resize_cookie(cookie, to);
47                 ceph_fscache_unuse_cookie(inode, true);
48         }
49 }
50
51 static inline void ceph_fscache_unpin_writeback(struct inode *inode,
52                                                 struct writeback_control *wbc)
53 {
54         fscache_unpin_writeback(wbc, ceph_fscache_cookie(ceph_inode(inode)));
55 }
56
57 static inline int ceph_fscache_dirty_folio(struct address_space *mapping,
58                 struct folio *folio)
59 {
60         struct ceph_inode_info *ci = ceph_inode(mapping->host);
61
62         return fscache_dirty_folio(mapping, folio, ceph_fscache_cookie(ci));
63 }
64
65 static inline int ceph_begin_cache_operation(struct netfs_read_request *rreq)
66 {
67         struct fscache_cookie *cookie = ceph_fscache_cookie(ceph_inode(rreq->inode));
68
69         return fscache_begin_read_operation(&rreq->cache_resources, cookie);
70 }
71
72 static inline bool ceph_is_cache_enabled(struct inode *inode)
73 {
74         return fscache_cookie_enabled(ceph_fscache_cookie(ceph_inode(inode)));
75 }
76
77 static inline void ceph_fscache_note_page_release(struct inode *inode)
78 {
79         struct ceph_inode_info *ci = ceph_inode(inode);
80
81         fscache_note_page_release(ceph_fscache_cookie(ci));
82 }
83 #else /* CONFIG_CEPH_FSCACHE */
84 static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc,
85                                            struct fs_context *fc)
86 {
87         return 0;
88 }
89
90 static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc)
91 {
92 }
93
94 static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci)
95 {
96 }
97
98 static inline void ceph_fscache_register_inode_cookie(struct inode *inode)
99 {
100 }
101
102 static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci)
103 {
104 }
105
106 static inline void ceph_fscache_use_cookie(struct inode *inode, bool will_modify)
107 {
108 }
109
110 static inline void ceph_fscache_unuse_cookie(struct inode *inode, bool update)
111 {
112 }
113
114 static inline void ceph_fscache_update(struct inode *inode)
115 {
116 }
117
118 static inline void ceph_fscache_invalidate(struct inode *inode, bool dio_write)
119 {
120 }
121
122 static inline struct fscache_cookie *ceph_fscache_cookie(struct ceph_inode_info *ci)
123 {
124         return NULL;
125 }
126
127 static inline void ceph_fscache_resize(struct inode *inode, loff_t to)
128 {
129 }
130
131 static inline void ceph_fscache_unpin_writeback(struct inode *inode,
132                                                 struct writeback_control *wbc)
133 {
134 }
135
136 static inline int ceph_fscache_dirty_folio(struct address_space *mapping,
137                 struct folio *folio)
138 {
139         return filemap_dirty_folio(mapping, folio);
140 }
141
142 static inline bool ceph_is_cache_enabled(struct inode *inode)
143 {
144         return false;
145 }
146
147 static inline int ceph_begin_cache_operation(struct netfs_read_request *rreq)
148 {
149         return -ENOBUFS;
150 }
151
152 static inline void ceph_fscache_note_page_release(struct inode *inode)
153 {
154 }
155 #endif /* CONFIG_CEPH_FSCACHE */
156
157 #endif