Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6ecc5e8f authored by Trond Myklebust's avatar Trond Myklebust
Browse files

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: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 7957c141
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -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;
	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)
+0 −1
Original line number Diff line number Diff line
@@ -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);
}