Merge branch 'akpm' (patches from Andrew)
[platform/kernel/linux-starfive.git] / fs / 9p / cache.h
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 */