aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@hammerspace.com>2021-03-17 08:46:19 -0400
committerTrond Myklebust <trond.myklebust@hammerspace.com>2021-04-05 09:04:20 -0400
commitf892c41c14e0fa3d78ce37de1d5c8161ed13bf08 (patch)
tree62c539f90f96fef4a27574b39e975890c231046b /fs
parentNFS: Fix handling of cookie verifier in uncached_readdir() (diff)
downloadlinux-dev-f892c41c14e0fa3d78ce37de1d5c8161ed13bf08.tar.xz
linux-dev-f892c41c14e0fa3d78ce37de1d5c8161ed13bf08.zip
NFS: Only change the cookie verifier if the directory page cache is empty
The cached NFSv3/v4 readdir cookies are associated with a verifier, which is checked by the server on subsequent calls to readdir, and is only expected to change when the cookies (and hence also the page cache contents) are considered invalid. We therefore do have to store the verifier, but only when the page cache is empty. Fixes: b593c09f83a2 ("NFS: Improve handling of directory verifiers") Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/dir.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 2cf2a7d92faf..0cd7c59a6601 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -929,7 +929,12 @@ static int find_and_lock_cache_page(struct nfs_readdir_descriptor *desc)
}
return res;
}
- memcpy(nfsi->cookieverf, verf, sizeof(nfsi->cookieverf));
+ /*
+ * Set the cookie verifier if the page cache was empty
+ */
+ if (desc->page_index == 0)
+ memcpy(nfsi->cookieverf, verf,
+ sizeof(nfsi->cookieverf));
}
res = nfs_readdir_search_array(desc);
if (res == 0) {