mirror of https://gitee.com/openkylin/linux.git
NFSv4: Ensure that we set the verifier when revalidating delegated dentries
This ensures that we don't have to look up the dentry again after we return the delegation if we know that the directory didn't change. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
parent
5584c30630
commit
15860ab1d7
|
@ -799,6 +799,9 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
|
|||
goto out_bad;
|
||||
}
|
||||
|
||||
if (nfs_have_delegation(inode, FMODE_READ))
|
||||
goto out_set_verifier;
|
||||
|
||||
/* Force a full look up iff the parent directory has changed */
|
||||
if (!nfs_is_exclusive_create(dir, nd) && nfs_check_verifier(dir, dentry)) {
|
||||
if (nfs_lookup_verify_inode(inode, nd))
|
||||
|
@ -817,6 +820,7 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd)
|
|||
if ((error = nfs_refresh_inode(inode, &fattr)) != 0)
|
||||
goto out_bad;
|
||||
|
||||
out_set_verifier:
|
||||
nfs_set_verifier(dentry, nfs_save_change_attribute(dir));
|
||||
out_valid:
|
||||
dput(parent);
|
||||
|
@ -1084,8 +1088,6 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
|
|||
no_open_dput:
|
||||
dput(parent);
|
||||
no_open:
|
||||
if (inode != NULL && nfs_have_delegation(inode, FMODE_READ))
|
||||
return 1;
|
||||
return nfs_lookup_revalidate(dentry, nd);
|
||||
}
|
||||
#endif /* CONFIG_NFSV4 */
|
||||
|
|
Loading…
Reference in New Issue