From: Trond Myklebust Date: Sat, 29 Sep 2007 21:15:01 +0000 (-0400) Subject: NFS: Fix nfs_verify_change_attribute() X-Git-Tag: v2.6.24-rc1~1285^2~38 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4b841736bc16b320bcdb1e8ece585b3ced9a8811;p=linux-2.6 NFS: Fix nfs_verify_change_attribute() We don't care about whether or not some other process on our client is changing the directory while we're in nfs_lookup_revalidate(), because the dcache will take care of ensuring local atomicity. We can therefore remove the test for nfs_caches_unstable(). Signed-off-by: Trond Myklebust --- diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 07df192e23..e275a6eb0a 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -646,7 +646,7 @@ static int nfs_check_verifier(struct inode *dir, struct dentry *dentry) { if (IS_ROOT(dentry)) return 1; - if (dentry->d_time == NFS_I(dir)->cache_change_attribute) + if (nfs_verify_change_attribute(dir, dentry->d_time)) return 1; return 0; } diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h index a765dd4569..0197b1243f 100644 --- a/include/linux/nfs_fs.h +++ b/include/linux/nfs_fs.h @@ -270,16 +270,16 @@ static inline unsigned long nfs_save_change_attribute(struct inode *dir) } /** - * nfs_verify_change_attribute - Detects NFS inode cache updates - * @inode - pointer to inode + * nfs_verify_change_attribute - Detects NFS remote directory changes + * @dir - pointer to parent directory inode * @chattr - previously saved change attribute - * Return "false" if metadata has been updated (or is in the process of - * being updated) since the change attribute was saved. + * Return "false" if the verifiers doesn't match the change attribute. + * This would usually indicate that the directory contents have changed on + * the server, and that any dentries need revalidating. */ -static inline int nfs_verify_change_attribute(struct inode *inode, unsigned long chattr) +static inline int nfs_verify_change_attribute(struct inode *dir, unsigned long chattr) { - return !nfs_caches_unstable(inode) - && chattr == NFS_I(inode)->cache_change_attribute; + return chattr == NFS_I(dir)->cache_change_attribute; } /*