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
|
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;
|