NFS: Remove redundant check in nfs_check_verifier()
The check for nfs_attribute_timeout(dir) in nfs_check_verifier is redundant: nfs_lookup_revalidate() will already call nfs_revalidate_inode() on the parent dir when necessary. The only case where this is not done is the case of a negative dentry. Fix this case by moving up the revalidation code. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
e62c2bba1f
commit
e70c490810
1 changed files with 5 additions and 7 deletions
12
fs/nfs/dir.c
12
fs/nfs/dir.c
|
@ -655,9 +655,7 @@ static int nfs_check_verifier(struct inode *dir, struct dentry *dentry)
|
|||
if (IS_ROOT(dentry))
|
||||
return 1;
|
||||
verf = (unsigned long)dentry->d_fsdata;
|
||||
if ((NFS_I(dir)->cache_validity & NFS_INO_INVALID_ATTR) != 0
|
||||
|| nfs_attribute_timeout(dir)
|
||||
|| nfs_caches_unstable(dir)
|
||||
if (nfs_caches_unstable(dir)
|
||||
|| verf != NFS_I(dir)->cache_change_attribute)
|
||||
return 0;
|
||||
return 1;
|
||||
|
@ -769,6 +767,10 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
|
|||
nfs_inc_stats(dir, NFSIOS_DENTRYREVALIDATE);
|
||||
inode = dentry->d_inode;
|
||||
|
||||
/* Revalidate parent directory attribute cache */
|
||||
if (nfs_revalidate_inode(NFS_SERVER(dir), dir) < 0)
|
||||
goto out_zap_parent;
|
||||
|
||||
if (!inode) {
|
||||
if (nfs_neg_need_reval(dir, dentry, nd))
|
||||
goto out_bad;
|
||||
|
@ -782,10 +784,6 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
|
|||
goto out_bad;
|
||||
}
|
||||
|
||||
/* Revalidate parent directory attribute cache */
|
||||
if (nfs_revalidate_inode(NFS_SERVER(dir), dir) < 0)
|
||||
goto out_zap_parent;
|
||||
|
||||
/* Force a full look up iff the parent directory has changed */
|
||||
if (nfs_check_verifier(dir, dentry)) {
|
||||
if (nfs_lookup_verify_inode(inode, nd))
|
||||
|
|
Loading…
Reference in a new issue