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;