diff options
Diffstat (limited to 'fs/nfs/dir.c')
-rw-r--r-- | fs/nfs/dir.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 34da48586829..cf80cf234e27 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
@@ -646,9 +646,14 @@ static int nfs_check_verifier(struct inode *dir, struct dentry *dentry) | |||
646 | { | 646 | { |
647 | if (IS_ROOT(dentry)) | 647 | if (IS_ROOT(dentry)) |
648 | return 1; | 648 | return 1; |
649 | if (nfs_verify_change_attribute(dir, dentry->d_time)) | 649 | if (!nfs_verify_change_attribute(dir, dentry->d_time)) |
650 | return 1; | 650 | return 0; |
651 | return 0; | 651 | /* Revalidate nfsi->cache_change_attribute before we declare a match */ |
652 | if (nfs_revalidate_inode(NFS_SERVER(dir), dir) < 0) | ||
653 | return 0; | ||
654 | if (!nfs_verify_change_attribute(dir, dentry->d_time)) | ||
655 | return 0; | ||
656 | return 1; | ||
652 | } | 657 | } |
653 | 658 | ||
654 | static inline void nfs_set_verifier(struct dentry * dentry, unsigned long verf) | 659 | static inline void nfs_set_verifier(struct dentry * dentry, unsigned long verf) |
@@ -742,10 +747,6 @@ static int nfs_lookup_revalidate(struct dentry * dentry, struct nameidata *nd) | |||
742 | nfs_inc_stats(dir, NFSIOS_DENTRYREVALIDATE); | 747 | nfs_inc_stats(dir, NFSIOS_DENTRYREVALIDATE); |
743 | inode = dentry->d_inode; | 748 | inode = dentry->d_inode; |
744 | 749 | ||
745 | /* Revalidate parent directory attribute cache */ | ||
746 | if (nfs_revalidate_inode(NFS_SERVER(dir), dir) < 0) | ||
747 | goto out_zap_parent; | ||
748 | |||
749 | if (!inode) { | 750 | if (!inode) { |
750 | if (nfs_neg_need_reval(dir, dentry, nd)) | 751 | if (nfs_neg_need_reval(dir, dentry, nd)) |
751 | goto out_bad; | 752 | goto out_bad; |