1 /* SPDX-License-Identifier: GPL-2.0-only */
3 * Ceph cache definitions.
5 * Copyright (C) 2013 by Adfin Solutions, Inc. All Rights Reserved.
6 * Written by Milosz Tanski (milosz@adfin.com)
12 #ifdef CONFIG_CEPH_FSCACHE
14 extern struct fscache_netfs ceph_cache_netfs
;
16 int ceph_fscache_register(void);
17 void ceph_fscache_unregister(void);
19 int ceph_fscache_register_fs(struct ceph_fs_client
* fsc
);
20 void ceph_fscache_unregister_fs(struct ceph_fs_client
* fsc
);
22 void ceph_fscache_register_inode_cookie(struct inode
*inode
);
23 void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info
* ci
);
24 void ceph_fscache_file_set_cookie(struct inode
*inode
, struct file
*filp
);
25 void ceph_fscache_revalidate_cookie(struct ceph_inode_info
*ci
);
27 int ceph_readpage_from_fscache(struct inode
*inode
, struct page
*page
);
28 int ceph_readpages_from_fscache(struct inode
*inode
,
29 struct address_space
*mapping
,
30 struct list_head
*pages
,
32 void ceph_readpage_to_fscache(struct inode
*inode
, struct page
*page
);
33 void ceph_invalidate_fscache_page(struct inode
* inode
, struct page
*page
);
35 static inline void ceph_fscache_inode_init(struct ceph_inode_info
*ci
)
38 ci
->i_fscache_gen
= 0;
41 static inline void ceph_fscache_invalidate(struct inode
*inode
)
43 fscache_invalidate(ceph_inode(inode
)->fscache
);
46 static inline void ceph_fscache_uncache_page(struct inode
*inode
,
49 struct ceph_inode_info
*ci
= ceph_inode(inode
);
50 return fscache_uncache_page(ci
->fscache
, page
);
53 static inline int ceph_release_fscache_page(struct page
*page
, gfp_t gfp
)
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
);
60 static inline void ceph_fscache_readpage_cancel(struct inode
*inode
,
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
);
68 static inline void ceph_fscache_readpages_cancel(struct inode
*inode
,
69 struct list_head
*pages
)
71 struct ceph_inode_info
*ci
= ceph_inode(inode
);
72 return fscache_readpages_cancel(ci
->fscache
, pages
);
75 static inline void ceph_disable_fscache_readpage(struct ceph_inode_info
*ci
)
77 ci
->i_fscache_gen
= ci
->i_rdcache_gen
- 1;
82 static inline int ceph_fscache_register(void)
87 static inline void ceph_fscache_unregister(void)
91 static inline int ceph_fscache_register_fs(struct ceph_fs_client
* fsc
)
96 static inline void ceph_fscache_unregister_fs(struct ceph_fs_client
* fsc
)
100 static inline void ceph_fscache_inode_init(struct ceph_inode_info
*ci
)
104 static inline void ceph_fscache_register_inode_cookie(struct inode
*inode
)
108 static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info
* ci
)
112 static inline void ceph_fscache_file_set_cookie(struct inode
*inode
,
117 static inline void ceph_fscache_revalidate_cookie(struct ceph_inode_info
*ci
)
121 static inline void ceph_fscache_uncache_page(struct inode
*inode
,
126 static inline int ceph_readpage_from_fscache(struct inode
* inode
,
132 static inline int ceph_readpages_from_fscache(struct inode
*inode
,
133 struct address_space
*mapping
,
134 struct list_head
*pages
,
140 static inline void ceph_readpage_to_fscache(struct inode
*inode
,
145 static inline void ceph_fscache_invalidate(struct inode
*inode
)
149 static inline void ceph_invalidate_fscache_page(struct inode
*inode
,
154 static inline int ceph_release_fscache_page(struct page
*page
, gfp_t gfp
)
159 static inline void ceph_fscache_readpage_cancel(struct inode
*inode
,
164 static inline void ceph_fscache_readpages_cancel(struct inode
*inode
,
165 struct list_head
*pages
)
169 static inline void ceph_disable_fscache_readpage(struct ceph_inode_info
*ci
)