diff -urN ../linux-2.4/fs/namei.c linux-2.4/fs/namei.c --- ../linux-2.4/fs/namei.c Fri Jul 6 00:32:39 2001 +++ linux-2.4/fs/namei.c Fri Jul 6 01:03:33 2001 @@ -350,11 +350,20 @@ spin_lock(&dcache_lock); mounted = lookup_mnt(*mnt, *dentry); if (mounted) { + struct dentry *mnt_root; *mnt = mntget(mounted); + mnt_root = mounted->mnt_root; + if (mnt_root->d_op && + mnt_root->d_op->d_revalidate && + !mnt_root->d_op->d_revalidate(mnt_root, LOOKUP_CONTINUE) && + !d_invalidate(mnt_root)) { + mntput(mounted); + return 0; + } spin_unlock(&dcache_lock); dput(*dentry); mntput(mounted->mnt_parent); - *dentry = dget(mounted->mnt_root); + *dentry = dget(mnt_root); return 1; } spin_unlock(&dcache_lock); diff -urN ../linux-2.4/fs/nfs/inode.c linux-2.4/fs/nfs/inode.c --- ../linux-2.4/fs/nfs/inode.c Fri Jul 6 00:32:40 2001 +++ linux-2.4/fs/nfs/inode.c Fri Jul 6 00:40:47 2001 @@ -391,6 +391,7 @@ goto out_no_root; sb->s_root->d_op = &nfs_dentry_operations; + sb->s_root->d_time = jiffies; /* Get some general file system info */ if (server->rpc_ops->statfs(server, root, &fsinfo) >= 0) { diff -urN ../linux-2.4/fs/super.c linux-2.4/fs/super.c --- ../linux-2.4/fs/super.c Fri Jul 6 00:32:42 2001 +++ linux-2.4/fs/super.c Fri Jul 6 00:40:47 2001 @@ -1168,7 +1168,7 @@ if (IS_ERR(kname)) goto out; retval = 0; - if (path_init(kname, LOOKUP_POSITIVE|LOOKUP_FOLLOW, &nd)) + if (path_init(kname, LOOKUP_POSITIVE, &nd)) retval = path_walk(kname, &nd); putname(kname); if (retval)