diff -urNX /misc/unpack/diff_kernel_excludes /mnt/3/linux-2.2.19/fs/namei.c linux-2.2.19/fs/namei.c --- /mnt/3/linux-2.2.19/fs/namei.c Sun Mar 25 08:30:58 2001 +++ linux-2.2.19/fs/namei.c Sat Apr 28 03:56:30 2001 @@ -301,11 +302,17 @@ return dentry; } -static inline struct dentry * follow_mount(struct dentry * dentry) +static inline struct dentry * follow_mount(struct dentry * dentry, int flags) { struct dentry * mnt = dentry->d_mounts; if (mnt != dentry) { + /* revalidate first */ + if (mnt->d_op && mnt->d_op->d_revalidate) { + if (!mnt->d_op->d_revalidate(mnt, flags) && !d_invalidate(mnt)) + /* don't follow the mount if we can't validate it */ + return dentry; + } dget(mnt); dput(dentry); dentry = mnt; @@ -405,7 +412,7 @@ } /* Check mountpoints.. */ - dentry = follow_mount(dentry); + dentry = follow_mount(dentry, flags); base = do_follow_link(base, dentry, flags); if (IS_ERR(base)) diff -urNX /misc/unpack/diff_kernel_excludes /mnt/3/linux-2.2.19/fs/nfs/inode.c linux-2.2.19/fs/nfs/inode.c --- /mnt/3/linux-2.2.19/fs/nfs/inode.c Sun Mar 25 08:37:38 2001 +++ linux-2.2.19/fs/nfs/inode.c Sat Apr 28 04:34:57 2001 @@ -435,6 +435,7 @@ goto failure_put_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, &fh, &fsinfo) >= 0) { diff -urNX /misc/unpack/diff_kernel_excludes /mnt/3/linux-2.2.19/fs/nfs/symlink.c linux-2.2.19/fs/nfs/symlink.c --- /mnt/3/linux-2.2.19/fs/nfs/symlink.c Sun Mar 25 08:37:38 2001 +++ linux-2.2.19/fs/nfs/symlink.c Sat Apr 28 03:11:52 2001 @@ -32,26 +32,9 @@ * symlinks can't do much... */ struct inode_operations nfs_symlink_inode_operations = { - NULL, /* no file-operations */ - NULL, /* create */ - NULL, /* lookup */ - NULL, /* link */ - NULL, /* unlink */ - NULL, /* symlink */ - NULL, /* mkdir */ - NULL, /* rmdir */ - NULL, /* mknod */ - NULL, /* rename */ - nfs_readlink, /* readlink */ - nfs_follow_link, /* follow_link */ - NULL, /* get_block */ - NULL, /* readpage */ - NULL, /* writepage */ - NULL, /* flushpage */ - NULL, /* truncate */ - NULL, /* permission */ - NULL, /* smap */ - NULL /* revalidate */ + readlink: nfs_readlink, + follow_link: nfs_follow_link, + revalidate: nfs_revalidate, }; /* Symlink caching in the page cache is even more simplistic diff -urNX /misc/unpack/diff_kernel_excludes /mnt/3/linux-2.2.19/fs/super.c linux-2.2.19/fs/super.c --- /mnt/3/linux-2.2.19/fs/super.c Sun Mar 25 08:30:58 2001 +++ linux-2.2.19/fs/super.c Sat Apr 28 01:01:38 2001 @@ -782,7 +782,7 @@ return -EPERM; lock_kernel(); - dentry = namei(name); + dentry = lnamei(name); retval = PTR_ERR(dentry); if (!IS_ERR(dentry)) { struct inode * inode = dentry->d_inode;