xref: /openbmc/linux/fs/9p/cache.h (revision 3e30a927)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * V9FS cache definitions.
4  *
5  *  Copyright (C) 2009 by Abhishek Kulkarni <adkulkar@umail.iu.edu>
6  */
7 
8 #ifndef _9P_CACHE_H
9 #define _9P_CACHE_H
10 #ifdef CONFIG_9P_FSCACHE
11 #include <linux/fscache.h>
12 #include <linux/spinlock.h>
13 
14 extern struct fscache_netfs v9fs_cache_netfs;
15 extern const struct fscache_cookie_def v9fs_cache_session_index_def;
16 extern const struct fscache_cookie_def v9fs_cache_inode_index_def;
17 
18 extern void v9fs_cache_session_get_cookie(struct v9fs_session_info *v9ses);
19 extern void v9fs_cache_session_put_cookie(struct v9fs_session_info *v9ses);
20 
21 extern void v9fs_cache_inode_get_cookie(struct inode *inode);
22 extern void v9fs_cache_inode_put_cookie(struct inode *inode);
23 extern void v9fs_cache_inode_flush_cookie(struct inode *inode);
24 extern void v9fs_cache_inode_set_cookie(struct inode *inode, struct file *filp);
25 extern void v9fs_cache_inode_reset_cookie(struct inode *inode);
26 
27 extern int __v9fs_cache_register(void);
28 extern void __v9fs_cache_unregister(void);
29 
30 extern int __v9fs_fscache_release_page(struct page *page, gfp_t gfp);
31 extern void __v9fs_fscache_invalidate_page(struct page *page);
32 extern int __v9fs_readpage_from_fscache(struct inode *inode,
33 					struct page *page);
34 extern int __v9fs_readpages_from_fscache(struct inode *inode,
35 					 struct address_space *mapping,
36 					 struct list_head *pages,
37 					 unsigned *nr_pages);
38 extern void __v9fs_readpage_to_fscache(struct inode *inode, struct page *page);
39 extern void __v9fs_fscache_wait_on_page_write(struct inode *inode,
40 					      struct page *page);
41 
42 static inline int v9fs_fscache_release_page(struct page *page,
43 					    gfp_t gfp)
44 {
45 	return __v9fs_fscache_release_page(page, gfp);
46 }
47 
48 static inline void v9fs_fscache_invalidate_page(struct page *page)
49 {
50 	__v9fs_fscache_invalidate_page(page);
51 }
52 
53 static inline int v9fs_readpage_from_fscache(struct inode *inode,
54 					     struct page *page)
55 {
56 	return __v9fs_readpage_from_fscache(inode, page);
57 }
58 
59 static inline int v9fs_readpages_from_fscache(struct inode *inode,
60 					      struct address_space *mapping,
61 					      struct list_head *pages,
62 					      unsigned *nr_pages)
63 {
64 	return __v9fs_readpages_from_fscache(inode, mapping, pages,
65 					     nr_pages);
66 }
67 
68 static inline void v9fs_readpage_to_fscache(struct inode *inode,
69 					    struct page *page)
70 {
71 	if (PageFsCache(page))
72 		__v9fs_readpage_to_fscache(inode, page);
73 }
74 
75 static inline void v9fs_uncache_page(struct inode *inode, struct page *page)
76 {
77 	struct v9fs_inode *v9inode = V9FS_I(inode);
78 	fscache_uncache_page(v9inode->fscache, page);
79 	BUG_ON(PageFsCache(page));
80 }
81 
82 static inline void v9fs_fscache_wait_on_page_write(struct inode *inode,
83 						   struct page *page)
84 {
85 	return __v9fs_fscache_wait_on_page_write(inode, page);
86 }
87 
88 #else /* CONFIG_9P_FSCACHE */
89 
90 static inline void v9fs_cache_inode_get_cookie(struct inode *inode)
91 {
92 }
93 
94 static inline void v9fs_cache_inode_put_cookie(struct inode *inode)
95 {
96 }
97 
98 static inline void v9fs_cache_inode_set_cookie(struct inode *inode, struct file *file)
99 {
100 }
101 
102 static inline int v9fs_fscache_release_page(struct page *page,
103 					    gfp_t gfp) {
104 	return 1;
105 }
106 
107 static inline void v9fs_fscache_invalidate_page(struct page *page) {}
108 
109 static inline int v9fs_readpage_from_fscache(struct inode *inode,
110 					     struct page *page)
111 {
112 	return -ENOBUFS;
113 }
114 
115 static inline int v9fs_readpages_from_fscache(struct inode *inode,
116 					      struct address_space *mapping,
117 					      struct list_head *pages,
118 					      unsigned *nr_pages)
119 {
120 	return -ENOBUFS;
121 }
122 
123 static inline void v9fs_readpage_to_fscache(struct inode *inode,
124 					    struct page *page)
125 {}
126 
127 static inline void v9fs_uncache_page(struct inode *inode, struct page *page)
128 {}
129 
130 static inline void v9fs_fscache_wait_on_page_write(struct inode *inode,
131 						   struct page *page)
132 {
133 	return;
134 }
135 
136 #endif /* CONFIG_9P_FSCACHE */
137 #endif /* _9P_CACHE_H */
138