Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/fs/9p/cache.h
15109 views
1
/*
2
* V9FS cache definitions.
3
*
4
* Copyright (C) 2009 by Abhishek Kulkarni <[email protected]>
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License version 2
8
* as published by the Free Software Foundation.
9
*
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
14
*
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to:
17
* Free Software Foundation
18
* 51 Franklin Street, Fifth Floor
19
* Boston, MA 02111-1301 USA
20
*
21
*/
22
23
#ifndef _9P_CACHE_H
24
#ifdef CONFIG_9P_FSCACHE
25
#include <linux/fscache.h>
26
#include <linux/spinlock.h>
27
28
extern struct fscache_netfs v9fs_cache_netfs;
29
extern const struct fscache_cookie_def v9fs_cache_session_index_def;
30
extern const struct fscache_cookie_def v9fs_cache_inode_index_def;
31
32
extern void v9fs_cache_session_get_cookie(struct v9fs_session_info *v9ses);
33
extern void v9fs_cache_session_put_cookie(struct v9fs_session_info *v9ses);
34
35
extern void v9fs_cache_inode_get_cookie(struct inode *inode);
36
extern void v9fs_cache_inode_put_cookie(struct inode *inode);
37
extern void v9fs_cache_inode_flush_cookie(struct inode *inode);
38
extern void v9fs_cache_inode_set_cookie(struct inode *inode, struct file *filp);
39
extern void v9fs_cache_inode_reset_cookie(struct inode *inode);
40
41
extern int __v9fs_cache_register(void);
42
extern void __v9fs_cache_unregister(void);
43
44
extern int __v9fs_fscache_release_page(struct page *page, gfp_t gfp);
45
extern void __v9fs_fscache_invalidate_page(struct page *page);
46
extern int __v9fs_readpage_from_fscache(struct inode *inode,
47
struct page *page);
48
extern int __v9fs_readpages_from_fscache(struct inode *inode,
49
struct address_space *mapping,
50
struct list_head *pages,
51
unsigned *nr_pages);
52
extern void __v9fs_readpage_to_fscache(struct inode *inode, struct page *page);
53
extern void __v9fs_fscache_wait_on_page_write(struct inode *inode,
54
struct page *page);
55
56
static inline int v9fs_fscache_release_page(struct page *page,
57
gfp_t gfp)
58
{
59
return __v9fs_fscache_release_page(page, gfp);
60
}
61
62
static inline void v9fs_fscache_invalidate_page(struct page *page)
63
{
64
__v9fs_fscache_invalidate_page(page);
65
}
66
67
static inline int v9fs_readpage_from_fscache(struct inode *inode,
68
struct page *page)
69
{
70
return __v9fs_readpage_from_fscache(inode, page);
71
}
72
73
static inline int v9fs_readpages_from_fscache(struct inode *inode,
74
struct address_space *mapping,
75
struct list_head *pages,
76
unsigned *nr_pages)
77
{
78
return __v9fs_readpages_from_fscache(inode, mapping, pages,
79
nr_pages);
80
}
81
82
static inline void v9fs_readpage_to_fscache(struct inode *inode,
83
struct page *page)
84
{
85
if (PageFsCache(page))
86
__v9fs_readpage_to_fscache(inode, page);
87
}
88
89
static inline void v9fs_uncache_page(struct inode *inode, struct page *page)
90
{
91
struct v9fs_inode *v9inode = V9FS_I(inode);
92
fscache_uncache_page(v9inode->fscache, page);
93
BUG_ON(PageFsCache(page));
94
}
95
96
static inline void v9fs_fscache_set_key(struct inode *inode,
97
struct p9_qid *qid)
98
{
99
struct v9fs_inode *v9inode = V9FS_I(inode);
100
spin_lock(&v9inode->fscache_lock);
101
v9inode->fscache_key = qid;
102
spin_unlock(&v9inode->fscache_lock);
103
}
104
105
static inline void v9fs_fscache_wait_on_page_write(struct inode *inode,
106
struct page *page)
107
{
108
return __v9fs_fscache_wait_on_page_write(inode, page);
109
}
110
111
#else /* CONFIG_9P_FSCACHE */
112
113
static inline int v9fs_fscache_release_page(struct page *page,
114
gfp_t gfp) {
115
return 1;
116
}
117
118
static inline void v9fs_fscache_invalidate_page(struct page *page) {}
119
120
static inline int v9fs_readpage_from_fscache(struct inode *inode,
121
struct page *page)
122
{
123
return -ENOBUFS;
124
}
125
126
static inline int v9fs_readpages_from_fscache(struct inode *inode,
127
struct address_space *mapping,
128
struct list_head *pages,
129
unsigned *nr_pages)
130
{
131
return -ENOBUFS;
132
}
133
134
static inline void v9fs_readpage_to_fscache(struct inode *inode,
135
struct page *page)
136
{}
137
138
static inline void v9fs_uncache_page(struct inode *inode, struct page *page)
139
{}
140
141
static inline void v9fs_fscache_wait_on_page_write(struct inode *inode,
142
struct page *page)
143
{
144
return;
145
}
146
147
#endif /* CONFIG_9P_FSCACHE */
148
#endif /* _9P_CACHE_H */
149
150