Root/
1 | /* NFS filesystem cache interface definitions |
2 | * |
3 | * Copyright (C) 2008 Red Hat, Inc. All Rights Reserved. |
4 | * Written by David Howells (dhowells@redhat.com) |
5 | * |
6 | * This program is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU General Public Licence |
8 | * as published by the Free Software Foundation; either version |
9 | * 2 of the Licence, or (at your option) any later version. |
10 | */ |
11 | |
12 | #ifndef _NFS_FSCACHE_H |
13 | #define _NFS_FSCACHE_H |
14 | |
15 | #include <linux/nfs_fs.h> |
16 | #include <linux/nfs_mount.h> |
17 | #include <linux/nfs4_mount.h> |
18 | #include <linux/fscache.h> |
19 | |
20 | #ifdef CONFIG_NFS_FSCACHE |
21 | |
22 | /* |
23 | * set of NFS FS-Cache objects that form a superblock key |
24 | */ |
25 | struct nfs_fscache_key { |
26 | struct rb_node node; |
27 | struct nfs_client *nfs_client; /* the server */ |
28 | |
29 | /* the elements of the unique key - as used by nfs_compare_super() and |
30 | * nfs_compare_mount_options() to distinguish superblocks */ |
31 | struct { |
32 | struct { |
33 | unsigned long s_flags; /* various flags |
34 | * (& NFS_MS_MASK) */ |
35 | } super; |
36 | |
37 | struct { |
38 | struct nfs_fsid fsid; |
39 | int flags; |
40 | unsigned int rsize; /* read size */ |
41 | unsigned int wsize; /* write size */ |
42 | unsigned int acregmin; /* attr cache timeouts */ |
43 | unsigned int acregmax; |
44 | unsigned int acdirmin; |
45 | unsigned int acdirmax; |
46 | } nfs_server; |
47 | |
48 | struct { |
49 | rpc_authflavor_t au_flavor; |
50 | } rpc_auth; |
51 | |
52 | /* uniquifier - can be used if nfs_server.flags includes |
53 | * NFS_MOUNT_UNSHARED */ |
54 | u8 uniq_len; |
55 | char uniquifier[0]; |
56 | } key; |
57 | }; |
58 | |
59 | /* |
60 | * fscache-index.c |
61 | */ |
62 | extern struct fscache_netfs nfs_fscache_netfs; |
63 | extern const struct fscache_cookie_def nfs_fscache_server_index_def; |
64 | extern const struct fscache_cookie_def nfs_fscache_super_index_def; |
65 | extern const struct fscache_cookie_def nfs_fscache_inode_object_def; |
66 | |
67 | extern int nfs_fscache_register(void); |
68 | extern void nfs_fscache_unregister(void); |
69 | |
70 | /* |
71 | * fscache.c |
72 | */ |
73 | extern void nfs_fscache_get_client_cookie(struct nfs_client *); |
74 | extern void nfs_fscache_release_client_cookie(struct nfs_client *); |
75 | |
76 | extern void nfs_fscache_get_super_cookie(struct super_block *, |
77 | const char *, |
78 | struct nfs_clone_mount *); |
79 | extern void nfs_fscache_release_super_cookie(struct super_block *); |
80 | |
81 | extern void nfs_fscache_init_inode_cookie(struct inode *); |
82 | extern void nfs_fscache_release_inode_cookie(struct inode *); |
83 | extern void nfs_fscache_zap_inode_cookie(struct inode *); |
84 | extern void nfs_fscache_set_inode_cookie(struct inode *, struct file *); |
85 | extern void nfs_fscache_reset_inode_cookie(struct inode *); |
86 | |
87 | extern void __nfs_fscache_invalidate_page(struct page *, struct inode *); |
88 | extern int nfs_fscache_release_page(struct page *, gfp_t); |
89 | |
90 | extern int __nfs_readpage_from_fscache(struct nfs_open_context *, |
91 | struct inode *, struct page *); |
92 | extern int __nfs_readpages_from_fscache(struct nfs_open_context *, |
93 | struct inode *, struct address_space *, |
94 | struct list_head *, unsigned *); |
95 | extern void __nfs_readpage_to_fscache(struct inode *, struct page *, int); |
96 | |
97 | /* |
98 | * wait for a page to complete writing to the cache |
99 | */ |
100 | static inline void nfs_fscache_wait_on_page_write(struct nfs_inode *nfsi, |
101 | struct page *page) |
102 | { |
103 | if (PageFsCache(page)) |
104 | fscache_wait_on_page_write(nfsi->fscache, page); |
105 | } |
106 | |
107 | /* |
108 | * release the caching state associated with a page if undergoing complete page |
109 | * invalidation |
110 | */ |
111 | static inline void nfs_fscache_invalidate_page(struct page *page, |
112 | struct inode *inode) |
113 | { |
114 | if (PageFsCache(page)) |
115 | __nfs_fscache_invalidate_page(page, inode); |
116 | } |
117 | |
118 | /* |
119 | * Retrieve a page from an inode data storage object. |
120 | */ |
121 | static inline int nfs_readpage_from_fscache(struct nfs_open_context *ctx, |
122 | struct inode *inode, |
123 | struct page *page) |
124 | { |
125 | if (NFS_I(inode)->fscache) |
126 | return __nfs_readpage_from_fscache(ctx, inode, page); |
127 | return -ENOBUFS; |
128 | } |
129 | |
130 | /* |
131 | * Retrieve a set of pages from an inode data storage object. |
132 | */ |
133 | static inline int nfs_readpages_from_fscache(struct nfs_open_context *ctx, |
134 | struct inode *inode, |
135 | struct address_space *mapping, |
136 | struct list_head *pages, |
137 | unsigned *nr_pages) |
138 | { |
139 | if (NFS_I(inode)->fscache) |
140 | return __nfs_readpages_from_fscache(ctx, inode, mapping, pages, |
141 | nr_pages); |
142 | return -ENOBUFS; |
143 | } |
144 | |
145 | /* |
146 | * Store a page newly fetched from the server in an inode data storage object |
147 | * in the cache. |
148 | */ |
149 | static inline void nfs_readpage_to_fscache(struct inode *inode, |
150 | struct page *page, |
151 | int sync) |
152 | { |
153 | if (PageFsCache(page)) |
154 | __nfs_readpage_to_fscache(inode, page, sync); |
155 | } |
156 | |
157 | /* |
158 | * indicate the client caching state as readable text |
159 | */ |
160 | static inline const char *nfs_server_fscache_state(struct nfs_server *server) |
161 | { |
162 | if (server->fscache && (server->options & NFS_OPTION_FSCACHE)) |
163 | return "yes"; |
164 | return "no "; |
165 | } |
166 | |
167 | |
168 | #else /* CONFIG_NFS_FSCACHE */ |
169 | static inline int nfs_fscache_register(void) { return 0; } |
170 | static inline void nfs_fscache_unregister(void) {} |
171 | |
172 | static inline void nfs_fscache_get_client_cookie(struct nfs_client *clp) {} |
173 | static inline void nfs_fscache_release_client_cookie(struct nfs_client *clp) {} |
174 | |
175 | static inline void nfs_fscache_get_super_cookie( |
176 | struct super_block *sb, |
177 | const char *uniq, |
178 | struct nfs_clone_mount *mntdata) |
179 | { |
180 | } |
181 | static inline void nfs_fscache_release_super_cookie(struct super_block *sb) {} |
182 | |
183 | static inline void nfs_fscache_init_inode_cookie(struct inode *inode) {} |
184 | static inline void nfs_fscache_release_inode_cookie(struct inode *inode) {} |
185 | static inline void nfs_fscache_zap_inode_cookie(struct inode *inode) {} |
186 | static inline void nfs_fscache_set_inode_cookie(struct inode *inode, |
187 | struct file *filp) {} |
188 | static inline void nfs_fscache_reset_inode_cookie(struct inode *inode) {} |
189 | |
190 | static inline int nfs_fscache_release_page(struct page *page, gfp_t gfp) |
191 | { |
192 | return 1; /* True: may release page */ |
193 | } |
194 | static inline void nfs_fscache_invalidate_page(struct page *page, |
195 | struct inode *inode) {} |
196 | static inline void nfs_fscache_wait_on_page_write(struct nfs_inode *nfsi, |
197 | struct page *page) {} |
198 | |
199 | static inline int nfs_readpage_from_fscache(struct nfs_open_context *ctx, |
200 | struct inode *inode, |
201 | struct page *page) |
202 | { |
203 | return -ENOBUFS; |
204 | } |
205 | static inline int nfs_readpages_from_fscache(struct nfs_open_context *ctx, |
206 | struct inode *inode, |
207 | struct address_space *mapping, |
208 | struct list_head *pages, |
209 | unsigned *nr_pages) |
210 | { |
211 | return -ENOBUFS; |
212 | } |
213 | static inline void nfs_readpage_to_fscache(struct inode *inode, |
214 | struct page *page, int sync) {} |
215 | |
216 | static inline const char *nfs_server_fscache_state(struct nfs_server *server) |
217 | { |
218 | return "no "; |
219 | } |
220 | |
221 | #endif /* CONFIG_NFS_FSCACHE */ |
222 | #endif /* _NFS_FSCACHE_H */ |
223 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9