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)
