diff -u /mnt/3/linux-2.4/fs/nfs/inode.c linux-2.4.4/fs/nfs/inode.c
--- /mnt/3/linux-2.4/fs/nfs/inode.c	Sat Apr 28 00:45:22 2001
+++ linux-2.4.4/fs/nfs/inode.c	Sat Apr 28 14:47:16 2001
@@ -380,6 +380,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 -u /mnt/3/linux-2.4/fs/super.c linux-2.4.4/fs/super.c
--- /mnt/3/linux-2.4/fs/super.c	Sat Apr 28 00:45:25 2001
+++ linux-2.4.4/fs/super.c	Sat Apr 28 13:33:01 2001
@@ -1116,7 +1116,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)
diff -u /mnt/3/linux-2.4/fs/namei.c linux-2.4.4/fs/namei.c
--- /mnt/3/linux-2.4/fs/namei.c	Sat Apr 28 00:45:22 2001
+++ linux-2.4.4/fs/namei.c	Sat Apr 28 20:31:35 2001
@@ -358,12 +358,17 @@
 		struct vfsmount *tmp;
 		tmp = list_entry(p, struct vfsmount, mnt_clash);
 		if (tmp->mnt_parent == *mnt) {
+			struct dentry *tmp_root = tmp->mnt_root;
+			if (tmp_root->d_op && tmp_root->d_op->d_revalidate) {
+				if (!tmp_root->d_op->d_revalidate(tmp_root, LOOKUP_CONTINUE) && !d_invalidate(tmp_root))
+					return 0;
+			}
 			*mnt = mntget(tmp);
 			spin_unlock(&dcache_lock);
 			mntput(tmp->mnt_parent);
 			/* tmp holds the mountpoint, so... */
 			dput(*dentry);
-			*dentry = dget(tmp->mnt_root);
+			*dentry = dget(tmp_root);
 			return 1;
 		}
 		p = p->next;
