xref: /linux/fs/ceph/cache.h (revision 99ccbd229cf7453206bc858e795ec1f0345ff258)
1*99ccbd22SMilosz Tanski /*
2*99ccbd22SMilosz Tanski  * Ceph cache definitions.
3*99ccbd22SMilosz Tanski  *
4*99ccbd22SMilosz Tanski  *  Copyright (C) 2013 by Adfin Solutions, Inc. All Rights Reserved.
5*99ccbd22SMilosz Tanski  *  Written by Milosz Tanski (milosz@adfin.com)
6*99ccbd22SMilosz Tanski  *
7*99ccbd22SMilosz Tanski  *  This program is free software; you can redistribute it and/or modify
8*99ccbd22SMilosz Tanski  *  it under the terms of the GNU General Public License version 2
9*99ccbd22SMilosz Tanski  *  as published by the Free Software Foundation.
10*99ccbd22SMilosz Tanski  *
11*99ccbd22SMilosz Tanski  *  This program is distributed in the hope that it will be useful,
12*99ccbd22SMilosz Tanski  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*99ccbd22SMilosz Tanski  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*99ccbd22SMilosz Tanski  *  GNU General Public License for more details.
15*99ccbd22SMilosz Tanski  *
16*99ccbd22SMilosz Tanski  *  You should have received a copy of the GNU General Public License
17*99ccbd22SMilosz Tanski  *  along with this program; if not, write to:
18*99ccbd22SMilosz Tanski  *  Free Software Foundation
19*99ccbd22SMilosz Tanski  *  51 Franklin Street, Fifth Floor
20*99ccbd22SMilosz Tanski  *  Boston, MA  02111-1301  USA
21*99ccbd22SMilosz Tanski  *
22*99ccbd22SMilosz Tanski  */
23*99ccbd22SMilosz Tanski 
24*99ccbd22SMilosz Tanski #ifndef _CEPH_CACHE_H
25*99ccbd22SMilosz Tanski #define _CEPH_CACHE_H
26*99ccbd22SMilosz Tanski 
27*99ccbd22SMilosz Tanski #ifdef CONFIG_CEPH_FSCACHE
28*99ccbd22SMilosz Tanski 
29*99ccbd22SMilosz Tanski int ceph_fscache_register(void);
30*99ccbd22SMilosz Tanski void ceph_fscache_unregister(void);
31*99ccbd22SMilosz Tanski 
32*99ccbd22SMilosz Tanski int ceph_fscache_register_fs(struct ceph_fs_client* fsc);
33*99ccbd22SMilosz Tanski void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc);
34*99ccbd22SMilosz Tanski 
35*99ccbd22SMilosz Tanski void ceph_fscache_inode_init(struct ceph_inode_info *ci);
36*99ccbd22SMilosz Tanski void ceph_fscache_register_inode_cookie(struct ceph_fs_client* fsc,
37*99ccbd22SMilosz Tanski 					struct ceph_inode_info* ci);
38*99ccbd22SMilosz Tanski void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci);
39*99ccbd22SMilosz Tanski 
40*99ccbd22SMilosz Tanski int ceph_readpage_from_fscache(struct inode *inode, struct page *page);
41*99ccbd22SMilosz Tanski int ceph_readpages_from_fscache(struct inode *inode,
42*99ccbd22SMilosz Tanski 				struct address_space *mapping,
43*99ccbd22SMilosz Tanski 				struct list_head *pages,
44*99ccbd22SMilosz Tanski 				unsigned *nr_pages);
45*99ccbd22SMilosz Tanski void ceph_readpage_to_fscache(struct inode *inode, struct page *page);
46*99ccbd22SMilosz Tanski void ceph_invalidate_fscache_page(struct inode* inode, struct page *page);
47*99ccbd22SMilosz Tanski void ceph_queue_revalidate(struct inode *inode);
48*99ccbd22SMilosz Tanski 
49*99ccbd22SMilosz Tanski static inline void ceph_fscache_invalidate(struct inode *inode)
50*99ccbd22SMilosz Tanski {
51*99ccbd22SMilosz Tanski 	fscache_invalidate(ceph_inode(inode)->fscache);
52*99ccbd22SMilosz Tanski }
53*99ccbd22SMilosz Tanski 
54*99ccbd22SMilosz Tanski static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp)
55*99ccbd22SMilosz Tanski {
56*99ccbd22SMilosz Tanski 	struct inode* inode = page->mapping->host;
57*99ccbd22SMilosz Tanski 	struct ceph_inode_info *ci = ceph_inode(inode);
58*99ccbd22SMilosz Tanski 	return fscache_maybe_release_page(ci->fscache, page, gfp);
59*99ccbd22SMilosz Tanski }
60*99ccbd22SMilosz Tanski 
61*99ccbd22SMilosz Tanski #else
62*99ccbd22SMilosz Tanski 
63*99ccbd22SMilosz Tanski static inline int ceph_fscache_register(void)
64*99ccbd22SMilosz Tanski {
65*99ccbd22SMilosz Tanski 	return 0;
66*99ccbd22SMilosz Tanski }
67*99ccbd22SMilosz Tanski 
68*99ccbd22SMilosz Tanski static inline void ceph_fscache_unregister(void)
69*99ccbd22SMilosz Tanski {
70*99ccbd22SMilosz Tanski }
71*99ccbd22SMilosz Tanski 
72*99ccbd22SMilosz Tanski static inline int ceph_fscache_register_fs(struct ceph_fs_client* fsc)
73*99ccbd22SMilosz Tanski {
74*99ccbd22SMilosz Tanski 	return 0;
75*99ccbd22SMilosz Tanski }
76*99ccbd22SMilosz Tanski 
77*99ccbd22SMilosz Tanski static inline void ceph_fscache_unregister_fs(struct ceph_fs_client* fsc)
78*99ccbd22SMilosz Tanski {
79*99ccbd22SMilosz Tanski }
80*99ccbd22SMilosz Tanski 
81*99ccbd22SMilosz Tanski static inline void ceph_fscache_inode_init(struct ceph_inode_info *ci)
82*99ccbd22SMilosz Tanski {
83*99ccbd22SMilosz Tanski }
84*99ccbd22SMilosz Tanski 
85*99ccbd22SMilosz Tanski static inline void ceph_fscache_register_inode_cookie(struct ceph_fs_client* parent_fsc,
86*99ccbd22SMilosz Tanski 						      struct ceph_inode_info* ci)
87*99ccbd22SMilosz Tanski {
88*99ccbd22SMilosz Tanski }
89*99ccbd22SMilosz Tanski 
90*99ccbd22SMilosz Tanski static inline void ceph_fscache_unregister_inode_cookie(struct ceph_inode_info* ci)
91*99ccbd22SMilosz Tanski {
92*99ccbd22SMilosz Tanski }
93*99ccbd22SMilosz Tanski 
94*99ccbd22SMilosz Tanski static inline int ceph_readpage_from_fscache(struct inode* inode,
95*99ccbd22SMilosz Tanski 					     struct page *page)
96*99ccbd22SMilosz Tanski {
97*99ccbd22SMilosz Tanski 	return -ENOBUFS;
98*99ccbd22SMilosz Tanski }
99*99ccbd22SMilosz Tanski 
100*99ccbd22SMilosz Tanski static inline int ceph_readpages_from_fscache(struct inode *inode,
101*99ccbd22SMilosz Tanski 					      struct address_space *mapping,
102*99ccbd22SMilosz Tanski 					      struct list_head *pages,
103*99ccbd22SMilosz Tanski 					      unsigned *nr_pages)
104*99ccbd22SMilosz Tanski {
105*99ccbd22SMilosz Tanski 	return -ENOBUFS;
106*99ccbd22SMilosz Tanski }
107*99ccbd22SMilosz Tanski 
108*99ccbd22SMilosz Tanski static inline void ceph_readpage_to_fscache(struct inode *inode,
109*99ccbd22SMilosz Tanski 					    struct page *page)
110*99ccbd22SMilosz Tanski {
111*99ccbd22SMilosz Tanski }
112*99ccbd22SMilosz Tanski 
113*99ccbd22SMilosz Tanski static inline void ceph_fscache_invalidate(struct inode *inode)
114*99ccbd22SMilosz Tanski {
115*99ccbd22SMilosz Tanski }
116*99ccbd22SMilosz Tanski 
117*99ccbd22SMilosz Tanski static inline void ceph_invalidate_fscache_page(struct inode *inode,
118*99ccbd22SMilosz Tanski 						struct page *page)
119*99ccbd22SMilosz Tanski {
120*99ccbd22SMilosz Tanski }
121*99ccbd22SMilosz Tanski 
122*99ccbd22SMilosz Tanski static inline int ceph_release_fscache_page(struct page *page, gfp_t gfp)
123*99ccbd22SMilosz Tanski {
124*99ccbd22SMilosz Tanski 	return 1;
125*99ccbd22SMilosz Tanski }
126*99ccbd22SMilosz Tanski 
127*99ccbd22SMilosz Tanski static inline void ceph_fscache_readpages_cancel(struct inode *inode,
128*99ccbd22SMilosz Tanski 						 struct list_head *pages)
129*99ccbd22SMilosz Tanski {
130*99ccbd22SMilosz Tanski }
131*99ccbd22SMilosz Tanski 
132*99ccbd22SMilosz Tanski static inline void ceph_queue_revalidate(struct inode *inode)
133*99ccbd22SMilosz Tanski {
134*99ccbd22SMilosz Tanski }
135*99ccbd22SMilosz Tanski 
136*99ccbd22SMilosz Tanski #endif
137*99ccbd22SMilosz Tanski 
138*99ccbd22SMilosz Tanski #endif
139