From: Trond Myklebust Date: Fri, 28 Sep 2007 18:20:33 +0000 (-0400) Subject: NFS: Fix dcache revalidation bugs X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=6ecc5e8fcad7ad64d68c098249359831331bd299;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git 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 --- diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 2b5e611352c5..6518b098e625 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -650,15 +650,11 @@ static int nfs_fsync_dir(struct file *filp, struct dentry *dentry, int datasync) */ 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 ed035a81eea2..cca1ab2922bf 100644 --- a/fs/nfs/inode.c +++ b/fs/nfs/inode.c @@ -785,7 +785,6 @@ void nfs_end_data_update(struct inode *inode) nfsi->cache_validity |= NFS_INO_INVALID_DATA; spin_unlock(&inode->i_lock); } - nfsi->cache_change_attribute = jiffies; atomic_dec(&nfsi->data_updates); }