NFS: Fix dcache revalidation bugs
We don't need to force a dentry lookup just because we're making changes to
the directory.
Don't update nfsi->cache_change_attribute in nfs_end_data_update: that
overrides the NFSv3/v4 weak consistency checking that tells us our update
was the only one, and that tells us the dcache is still valid.
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 2b5e611..6518b09 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -650,15 +650,11 @@
*/
static int nfs_check_verifier(struct inode *dir, struct dentry *dentry)
{
- unsigned long verf;
-
if (IS_ROOT(dentry))
return 1;
- verf = dentry->d_time;
- if (nfs_caches_unstable(dir)
- || verf != NFS_I(dir)->cache_change_attribute)
- return 0;
- return 1;
+ if (dentry->d_time == NFS_I(dir)->cache_change_attribute)
+ return 1;
+ return 0;
}
static inline void nfs_set_verifier(struct dentry * dentry, unsigned long verf)
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
index ed035a8..cca1ab2 100644
--- a/fs/nfs/inode.c
+++ b/fs/nfs/inode.c
@@ -785,7 +785,6 @@
nfsi->cache_validity |= NFS_INO_INVALID_DATA;
spin_unlock(&inode->i_lock);
}
- nfsi->cache_change_attribute = jiffies;
atomic_dec(&nfsi->data_updates);
}