13 #include <linux/kernel.h>
14 #include <linux/sched.h>
16 #include <linux/nfs_fs.h>
18 #include <linux/in6.h>
20 #include <linux/slab.h>
26 #define NFSDBG_FACILITY NFSDBG_FSCACHE
43 dfprintk(FSCACHE,
"NFS: get client cookie (0x%p/0x%p)\n",
52 dfprintk(FSCACHE,
"NFS: releasing client cookie (0x%p/0x%p)\n",
55 fscache_relinquish_cookie(clp->fscache, 0);
69 struct nfs_fscache_key *
key, *xkey;
79 key = kzalloc(
sizeof(*key) + ulen,
GFP_KERNEL);
85 key->key.nfs_server.flags = nfss->
flags;
86 key->key.nfs_server.rsize = nfss->
rsize;
87 key->key.nfs_server.wsize = nfss->
wsize;
88 key->key.nfs_server.acregmin = nfss->
acregmin;
89 key->key.nfs_server.acregmax = nfss->
acregmax;
90 key->key.nfs_server.acdirmin = nfss->
acdirmin;
91 key->key.nfs_server.acdirmax = nfss->
acdirmax;
92 key->key.nfs_server.fsid = nfss->
fsid;
93 key->key.rpc_auth.au_flavor = nfss->
client->cl_auth->au_flavor;
95 key->key.uniq_len =
ulen;
96 memcpy(key->key.uniquifier, uniq, ulen);
98 spin_lock(&nfs_fscache_keys_lock);
105 if (key->nfs_client < xkey->nfs_client)
107 if (key->nfs_client > xkey->nfs_client)
110 diff =
memcmp(&key->key, &xkey->key,
sizeof(key->key));
116 if (key->key.uniq_len == 0)
118 diff =
memcmp(key->key.uniquifier,
119 xkey->key.uniquifier,
134 rb_link_node(&key->node, parent, p);
136 spin_unlock(&nfs_fscache_keys_lock);
137 nfss->fscache_key =
key;
140 nfss->fscache = fscache_acquire_cookie(nfss->
nfs_client->fscache,
143 dfprintk(FSCACHE,
"NFS: get superblock cookie (0x%p/0x%p)\n",
144 nfss, nfss->fscache);
148 spin_unlock(&nfs_fscache_keys_lock);
150 nfss->fscache_key =
NULL;
151 nfss->fscache =
NULL;
153 " Cache request denied due to non-unique superblock keys\n");
163 dfprintk(FSCACHE,
"NFS: releasing superblock cookie (0x%p/0x%p)\n",
164 nfss, nfss->fscache);
166 fscache_relinquish_cookie(nfss->fscache, 0);
167 nfss->fscache =
NULL;
169 if (nfss->fscache_key) {
170 spin_lock(&nfs_fscache_keys_lock);
171 rb_erase(&nfss->fscache_key->node, &nfs_fscache_keys);
172 spin_unlock(&nfs_fscache_keys_lock);
173 kfree(nfss->fscache_key);
174 nfss->fscache_key =
NULL;
183 NFS_I(inode)->fscache =
NULL;
191 static void nfs_fscache_enable_inode_cookie(
struct inode *
inode)
196 if (nfsi->fscache || !NFS_FSCACHE(inode))
200 nfsi->fscache = fscache_acquire_cookie(
205 dfprintk(FSCACHE,
"NFS: get FH cookie (0x%p/0x%p/0x%p)\n",
206 sb, nfsi, nfsi->fscache);
217 dfprintk(FSCACHE,
"NFS: clear cookie (0x%p/0x%p)\n",
218 nfsi, nfsi->fscache);
220 fscache_relinquish_cookie(nfsi->fscache, 0);
221 nfsi->fscache =
NULL;
231 dfprintk(FSCACHE,
"NFS: zapping cookie (0x%p/0x%p)\n",
232 nfsi, nfsi->fscache);
234 fscache_relinquish_cookie(nfsi->fscache, 1);
235 nfsi->fscache =
NULL;
243 static void nfs_fscache_disable_inode_cookie(
struct inode *inode)
247 if (NFS_I(inode)->fscache) {
249 "NFS: nfsi 0x%p turning cache off\n", NFS_I(inode));
254 fscache_uncache_all_inode_pages(NFS_I(inode)->fscache, inode);
262 static int nfs_fscache_wait_bit(
void *
flags)
271 static inline void nfs_fscache_inode_lock(
struct inode *inode)
283 static inline void nfs_fscache_inode_unlock(
struct inode *inode)
301 if (NFS_FSCACHE(inode)) {
302 nfs_fscache_inode_lock(inode);
304 nfs_fscache_disable_inode_cookie(inode);
306 nfs_fscache_enable_inode_cookie(inode);
307 nfs_fscache_inode_unlock(inode);
321 nfs_fscache_inode_lock(inode);
324 fscache_relinquish_cookie(nfsi->fscache, 1);
326 nfsi->fscache = fscache_acquire_cookie(
332 "NFS: revalidation new cookie (0x%p/0x%p/0x%p/0x%p)\n",
333 nfss, nfsi, old, nfsi->fscache);
335 nfs_fscache_inode_unlock(inode);
350 dfprintk(FSCACHE,
"NFS: fscache releasepage (0x%p/0x%p/0x%p)\n",
353 if (!fscache_maybe_release_page(cookie, page, gfp))
356 nfs_add_fscache_stats(page->
mapping->host,
374 dfprintk(FSCACHE,
"NFS: fscache invalidatepage (0x%p/0x%p/0x%p)\n",
377 fscache_wait_on_page_write(cookie, page);
379 BUG_ON(!PageLocked(page));
380 fscache_uncache_page(cookie, page);
381 nfs_add_fscache_stats(page->
mapping->host,
389 static void nfs_readpage_from_fscache_complete(
struct page *
page,
394 "NFS: readpage_from_fscache_complete (0x%p/0x%p/%d)\n",
395 page, context, error);
400 SetPageUptodate(page);
413 struct inode *inode,
struct page *page)
418 "NFS: readpage_from_fscache(fsc:%p/p:%p(i:%lx f:%lx)/0x%p)\n",
419 NFS_I(inode)->fscache, page, page->
index, page->
flags, inode);
421 ret = fscache_read_or_alloc_page(NFS_I(inode)->fscache,
423 nfs_readpage_from_fscache_complete,
430 "NFS: readpage_from_fscache: BIO submitted\n");
438 "NFS: readpage_from_fscache %d\n", ret);
442 dfprintk(FSCACHE,
"NFS: readpage_from_fscache %d\n", ret);
457 unsigned npages = *nr_pages;
460 dfprintk(FSCACHE,
"NFS: nfs_getpages_from_fscache (0x%p/%u/0x%p)\n",
461 NFS_I(inode)->fscache, npages, inode);
463 ret = fscache_read_or_alloc_pages(NFS_I(inode)->fscache,
464 mapping, pages, nr_pages,
465 nfs_readpage_from_fscache_complete,
467 mapping_gfp_mask(mapping));
468 if (*nr_pages < npages)
477 BUG_ON(!list_empty(pages));
480 "NFS: nfs_getpages_from_fscache: submitted\n");
487 "NFS: nfs_getpages_from_fscache: no page: %d\n", ret);
492 "NFS: nfs_getpages_from_fscache: ret %d\n", ret);
507 "NFS: readpage_to_fscache(fsc:%p/p:%p(i:%lx f:%lx)/%d)\n",
508 NFS_I(inode)->fscache, page, page->
index, page->
flags, sync);
510 ret = fscache_write_page(NFS_I(inode)->fscache, page,
GFP_KERNEL);
512 "NFS: readpage_to_fscache: p:%p(i:%lu f:%lx) ret %d\n",
516 fscache_uncache_page(NFS_I(inode)->fscache, page);
517 nfs_add_fscache_stats(inode,
521 nfs_add_fscache_stats(inode,