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 <Trond.Myklebust@netapp.com>
This commit is contained in:
Trond Myklebust 2007-09-29 17:15:01 -04:00
Родитель 8edb018288
Коммит 4b841736bc
2 изменённых файлов: 8 добавлений и 8 удалений

Просмотреть файл

@ -646,7 +646,7 @@ static int nfs_check_verifier(struct inode *dir, struct dentry *dentry)
{ {
if (IS_ROOT(dentry)) if (IS_ROOT(dentry))
return 1; return 1;
if (dentry->d_time == NFS_I(dir)->cache_change_attribute) if (nfs_verify_change_attribute(dir, dentry->d_time))
return 1; return 1;
return 0; return 0;
} }

Просмотреть файл

@ -270,16 +270,16 @@ static inline unsigned long nfs_save_change_attribute(struct inode *dir)
} }
/** /**
* nfs_verify_change_attribute - Detects NFS inode cache updates * nfs_verify_change_attribute - Detects NFS remote directory changes
* @inode - pointer to inode * @dir - pointer to parent directory inode
* @chattr - previously saved change attribute * @chattr - previously saved change attribute
* Return "false" if metadata has been updated (or is in the process of * Return "false" if the verifiers doesn't match the change attribute.
* being updated) since the change attribute was saved. * 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) return chattr == NFS_I(dir)->cache_change_attribute;
&& chattr == NFS_I(inode)->cache_change_attribute;
} }
/* /*