NFS: Only look at the change attribute cache state in nfs_weak_revalidate()
authorTrond Myklebust <trond.myklebust@primarydata.com>
Fri, 16 Dec 2016 23:04:47 +0000 (18:04 -0500)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Mon, 19 Dec 2016 22:29:37 +0000 (17:29 -0500)
Just like in nfs_check_verifier(), we want to use
nfs_mapping_need_revalidate_inode() to check our knowledge of the
change attribute is up to date.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/dir.c

index cb22a9f9ae7e3694db1532a683ae34d4d313e787..8f706f3e5c05cb02bc6e075f115764c0f0b487e1 100644 (file)
@@ -1273,8 +1273,8 @@ out_error:
  */
 static int nfs_weak_revalidate(struct dentry *dentry, unsigned int flags)
 {
-       int error;
        struct inode *inode = d_inode(dentry);
+       int error = 0;
 
        /*
         * I believe we can only get a negative dentry here in the case of a
@@ -1293,7 +1293,8 @@ static int nfs_weak_revalidate(struct dentry *dentry, unsigned int flags)
                return 0;
        }
 
-       error = nfs_revalidate_inode(NFS_SERVER(inode), inode);
+       if (nfs_mapping_need_revalidate_inode(inode))
+               error = __nfs_revalidate_inode(NFS_SERVER(inode), inode);
        dfprintk(LOOKUPCACHE, "NFS: %s: inode %lu is %s\n",
                        __func__, inode->i_ino, error ? "invalid" : "valid");
        return !error;