1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
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;
|