1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Ceph cache definitions.
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Copyright (C) 2013 by Adfin Solutions, Inc. All Rights Reserved.
6*4882a593Smuzhiyun * Written by Milosz Tanski (milosz@adfin.com)
7*4882a593Smuzhiyun */
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun #ifndef _CEPH_CACHE_H
10*4882a593Smuzhiyun #define _CEPH_CACHE_H
11*4882a593Smuzhiyun
12*4882a593Smuzhiyun #ifdef CONFIG_CEPH_FSCACHE
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun extern struct fscache_netfs ceph_cache_netfs;
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun int ceph_fscache_register(void);
17*4882a593Smuzhiyun void ceph_fscache_unregister(void);
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun int ceph_fscache_register_fs(struct ceph_fs_client* fsc, struct fs_context *fc);
20*4882a593Smuzhiyun void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc);
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun void ceph_fscache_register_inode_cookie(struct inode *inode);
23*4882a593Smuzhiyun void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci);
24*4882a593Smuzhiyun void ceph_fscache_file_set_cookie(struct inode *inode, struct file *filp);
25*4882a593Smuzhiyun void ceph_fscache_revalidate_cookie(struct ceph_inode_info *ci);
26*4882a593Smuzhiyun
27*4882a593Smuzhiyun int ceph_readpage_from_fscache(struct inode *inode, struct page *page);
28*4882a593Smuzhiyun int ceph_readpages_from_fscache(struct inode *inode,
29*4882a593Smuzhiyun struct address_space *mapping,
30*4882a593Smuzhiyun struct list_head *pages,
31*4882a593Smuzhiyun unsigned *nr_pages);
32*4882a593Smuzhiyun void ceph_readpage_to_fscache(struct inode *inode, struct page *page);
33*4882a593Smuzhiyun void ceph_invalidate_fscache_page(struct inode* inode, struct page *page);
34*4882a593Smuzhiyun
ceph_fscache_inode_init(struct ceph_inode_info * ci)35*4882a593Smuzhiyun static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci)
36*4882a593Smuzhiyun {
37*4882a593Smuzhiyun ci->fscache = NULL;
38*4882a593Smuzhiyun ci->i_fscache_gen = 0;
39*4882a593Smuzhiyun }
40*4882a593Smuzhiyun
ceph_fscache_invalidate(struct inode * inode)41*4882a593Smuzhiyun static inline void ceph_fscache_invalidate(struct inode *inode)
42*4882a593Smuzhiyun {
43*4882a593Smuzhiyun fscache_invalidate(ceph_inode(inode)->fscache);
44*4882a593Smuzhiyun }
45*4882a593Smuzhiyun
ceph_fscache_uncache_page(struct inode * inode,struct page * page)46*4882a593Smuzhiyun static inline void ceph_fscache_uncache_page(struct inode *inode,
47*4882a593Smuzhiyun struct page *page)
48*4882a593Smuzhiyun {
49*4882a593Smuzhiyun struct ceph_inode_info *ci = ceph_inode(inode);
50*4882a593Smuzhiyun return fscache_uncache_page(ci->fscache, page);
51*4882a593Smuzhiyun }
52*4882a593Smuzhiyun
ceph_release_fscache_page(struct page * page,gfp_t gfp)53*4882a593Smuzhiyun static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp)
54*4882a593Smuzhiyun {
55*4882a593Smuzhiyun struct inode* inode = page->mapping->host;
56*4882a593Smuzhiyun struct ceph_inode_info *ci = ceph_inode(inode);
57*4882a593Smuzhiyun return fscache_maybe_release_page(ci->fscache, page, gfp);
58*4882a593Smuzhiyun }
59*4882a593Smuzhiyun
ceph_fscache_readpage_cancel(struct inode * inode,struct page * page)60*4882a593Smuzhiyun static inline void ceph_fscache_readpage_cancel(struct inode *inode,
61*4882a593Smuzhiyun struct page *page)
62*4882a593Smuzhiyun {
63*4882a593Smuzhiyun struct ceph_inode_info *ci = ceph_inode(inode);
64*4882a593Smuzhiyun if (fscache_cookie_valid(ci->fscache) && PageFsCache(page))
65*4882a593Smuzhiyun __fscache_uncache_page(ci->fscache, page);
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun
ceph_fscache_readpages_cancel(struct inode * inode,struct list_head * pages)68*4882a593Smuzhiyun static inline void ceph_fscache_readpages_cancel(struct inode *inode,
69*4882a593Smuzhiyun struct list_head *pages)
70*4882a593Smuzhiyun {
71*4882a593Smuzhiyun struct ceph_inode_info *ci = ceph_inode(inode);
72*4882a593Smuzhiyun return fscache_readpages_cancel(ci->fscache, pages);
73*4882a593Smuzhiyun }
74*4882a593Smuzhiyun
ceph_disable_fscache_readpage(struct ceph_inode_info * ci)75*4882a593Smuzhiyun static inline void ceph_disable_fscache_readpage(struct ceph_inode_info *ci)
76*4882a593Smuzhiyun {
77*4882a593Smuzhiyun ci->i_fscache_gen = ci->i_rdcache_gen - 1;
78*4882a593Smuzhiyun }
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun #else
81*4882a593Smuzhiyun
ceph_fscache_register(void)82*4882a593Smuzhiyun static inline int ceph_fscache_register(void)
83*4882a593Smuzhiyun {
84*4882a593Smuzhiyun return 0;
85*4882a593Smuzhiyun }
86*4882a593Smuzhiyun
ceph_fscache_unregister(void)87*4882a593Smuzhiyun static inline void ceph_fscache_unregister(void)
88*4882a593Smuzhiyun {
89*4882a593Smuzhiyun }
90*4882a593Smuzhiyun
ceph_fscache_register_fs(struct ceph_fs_client * fsc,struct fs_context * fc)91*4882a593Smuzhiyun static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc,
92*4882a593Smuzhiyun struct fs_context *fc)
93*4882a593Smuzhiyun {
94*4882a593Smuzhiyun return 0;
95*4882a593Smuzhiyun }
96*4882a593Smuzhiyun
ceph_fscache_unregister_fs(struct ceph_fs_client * fsc)97*4882a593Smuzhiyun static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc)
98*4882a593Smuzhiyun {
99*4882a593Smuzhiyun }
100*4882a593Smuzhiyun
ceph_fscache_inode_init(struct ceph_inode_info * ci)101*4882a593Smuzhiyun static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci)
102*4882a593Smuzhiyun {
103*4882a593Smuzhiyun }
104*4882a593Smuzhiyun
ceph_fscache_register_inode_cookie(struct inode * inode)105*4882a593Smuzhiyun static inline void ceph_fscache_register_inode_cookie(struct inode *inode)
106*4882a593Smuzhiyun {
107*4882a593Smuzhiyun }
108*4882a593Smuzhiyun
ceph_fscache_unregister_inode_cookie(struct ceph_inode_info * ci)109*4882a593Smuzhiyun static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci)
110*4882a593Smuzhiyun {
111*4882a593Smuzhiyun }
112*4882a593Smuzhiyun
ceph_fscache_file_set_cookie(struct inode * inode,struct file * filp)113*4882a593Smuzhiyun static inline void ceph_fscache_file_set_cookie(struct inode *inode,
114*4882a593Smuzhiyun struct file *filp)
115*4882a593Smuzhiyun {
116*4882a593Smuzhiyun }
117*4882a593Smuzhiyun
ceph_fscache_revalidate_cookie(struct ceph_inode_info * ci)118*4882a593Smuzhiyun static inline void ceph_fscache_revalidate_cookie(struct ceph_inode_info *ci)
119*4882a593Smuzhiyun {
120*4882a593Smuzhiyun }
121*4882a593Smuzhiyun
ceph_fscache_uncache_page(struct inode * inode,struct page * pages)122*4882a593Smuzhiyun static inline void ceph_fscache_uncache_page(struct inode *inode,
123*4882a593Smuzhiyun struct page *pages)
124*4882a593Smuzhiyun {
125*4882a593Smuzhiyun }
126*4882a593Smuzhiyun
ceph_readpage_from_fscache(struct inode * inode,struct page * page)127*4882a593Smuzhiyun static inline int ceph_readpage_from_fscache(struct inode* inode,
128*4882a593Smuzhiyun struct page *page)
129*4882a593Smuzhiyun {
130*4882a593Smuzhiyun return -ENOBUFS;
131*4882a593Smuzhiyun }
132*4882a593Smuzhiyun
ceph_readpages_from_fscache(struct inode * inode,struct address_space * mapping,struct list_head * pages,unsigned * nr_pages)133*4882a593Smuzhiyun static inline int ceph_readpages_from_fscache(struct inode *inode,
134*4882a593Smuzhiyun struct address_space *mapping,
135*4882a593Smuzhiyun struct list_head *pages,
136*4882a593Smuzhiyun unsigned *nr_pages)
137*4882a593Smuzhiyun {
138*4882a593Smuzhiyun return -ENOBUFS;
139*4882a593Smuzhiyun }
140*4882a593Smuzhiyun
ceph_readpage_to_fscache(struct inode * inode,struct page * page)141*4882a593Smuzhiyun static inline void ceph_readpage_to_fscache(struct inode *inode,
142*4882a593Smuzhiyun struct page *page)
143*4882a593Smuzhiyun {
144*4882a593Smuzhiyun }
145*4882a593Smuzhiyun
ceph_fscache_invalidate(struct inode * inode)146*4882a593Smuzhiyun static inline void ceph_fscache_invalidate(struct inode *inode)
147*4882a593Smuzhiyun {
148*4882a593Smuzhiyun }
149*4882a593Smuzhiyun
ceph_invalidate_fscache_page(struct inode * inode,struct page * page)150*4882a593Smuzhiyun static inline void ceph_invalidate_fscache_page(struct inode *inode,
151*4882a593Smuzhiyun struct page *page)
152*4882a593Smuzhiyun {
153*4882a593Smuzhiyun }
154*4882a593Smuzhiyun
ceph_release_fscache_page(struct page * page,gfp_t gfp)155*4882a593Smuzhiyun static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp)
156*4882a593Smuzhiyun {
157*4882a593Smuzhiyun return 1;
158*4882a593Smuzhiyun }
159*4882a593Smuzhiyun
ceph_fscache_readpage_cancel(struct inode * inode,struct page * page)160*4882a593Smuzhiyun static inline void ceph_fscache_readpage_cancel(struct inode *inode,
161*4882a593Smuzhiyun struct page *page)
162*4882a593Smuzhiyun {
163*4882a593Smuzhiyun }
164*4882a593Smuzhiyun
ceph_fscache_readpages_cancel(struct inode * inode,struct list_head * pages)165*4882a593Smuzhiyun static inline void ceph_fscache_readpages_cancel(struct inode *inode,
166*4882a593Smuzhiyun struct list_head *pages)
167*4882a593Smuzhiyun {
168*4882a593Smuzhiyun }
169*4882a593Smuzhiyun
ceph_disable_fscache_readpage(struct ceph_inode_info * ci)170*4882a593Smuzhiyun static inline void ceph_disable_fscache_readpage(struct ceph_inode_info *ci)
171*4882a593Smuzhiyun {
172*4882a593Smuzhiyun }
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun #endif
175*4882a593Smuzhiyun
176*4882a593Smuzhiyun #endif
177