NFS: Fix dentry revalidation for NFSv4 referrals and mountpoint crossings
authorTrond Myklebust <Trond.Myklebust@netapp.com>
Thu, 6 Mar 2008 17:34:59 +0000 (12:34 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Fri, 7 Mar 2008 19:35:41 +0000 (14:35 -0500)
As long as the directory contents haven't changed, we should just let the
path walk proceed to cross the mountpoint. Apart from being an optimisation
in the case of 'nohide' mountpoint traversals, it also fixes an issue with
referrals: referral inodes don't have valid filehandles, so calling
nfs_revalidate_inode() on them is a bug.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/dir.c

index ae04892a5e5d23922cec2575ffa4609ced0afde7..6cea7479c5b4d13136fb753eecc453f19dc43229 100644 (file)
@@ -710,6 +710,8 @@ int nfs_lookup_verify_inode(struct inode *inode, struct nameidata *nd)
 {
        struct nfs_server *server = NFS_SERVER(inode);
 
+       if (test_bit(NFS_INO_MOUNTPOINT, &NFS_I(inode)->flags))
+               return 0;
        if (nd != NULL) {
                /* VFS wants an on-the-wire revalidation */
                if (nd->flags & LOOKUP_REVAL)