Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrond Myklebust <trond.myklebust@fys.uio.no>2003-08-21 04:43:45 -0700
committerTrond Myklebust <trond.myklebust@fys.uio.no>2003-08-21 04:43:45 -0700
commit957ca7579901f70242cb484d3840f156d7f2b07f (patch)
tree2a8e4e538379b32a3c9e785eb39296b43badb2fc
parent5579cbd6894d83f81517c6b790c4f511f94e7976 (diff)
Fix a problem whereby READDIRPLUS was causing lookups to result in
ESTALE errors.
-rw-r--r--fs/nfs/dir.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index fd894fa6584b..dab0b0bd0ef3 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -557,7 +557,7 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
/* Force a full look up iff the parent directory has changed */
if (nfs_check_verifier(dir, dentry)) {
if (nfs_lookup_verify_inode(inode, isopen))
- goto out_bad;
+ goto out_zap_parent;
goto out_valid;
}
@@ -566,7 +566,7 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
if (memcmp(NFS_FH(inode), &fhandle, sizeof(struct nfs_fh))!= 0)
goto out_bad;
if (nfs_lookup_verify_inode(inode, isopen))
- goto out_bad;
+ goto out_zap_parent;
goto out_valid_renew;
}
@@ -587,6 +587,8 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
unlock_kernel();
dput(parent);
return 1;
+out_zap_parent:
+ nfs_zap_caches(dir);
out_bad:
NFS_CACHEINV(dir);
if (inode && S_ISDIR(inode->i_mode)) {