Bug 44859 - am-utils - maintainers page
Summary: am-utils - maintainers page
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: Red Hat Linux
Classification: Retired
Component: kernel
Version: 7.1
Hardware: i686
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Nalin Dahyabhai
QA Contact: Aaron Brown
URL: http://www.am-utils.com/patches/
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2001-06-18 14:52 UTC by Brock Murch
Modified: 2008-08-01 16:22 UTC (History)
0 users

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2004-09-30 15:39:02 UTC
Embargoed:


Attachments (Terms of Use)

Description Brock Murch 2001-06-18 14:52:06 UTC
From Bugzilla Helper:
User-Agent: Mozilla/4.77 [en] (X11; U; Linux 2.4.2-2 i686)

Description of problem:
The kernel fails to revalidate the symlink provided by Amd. The remote
filesystem is mounted, then timed-out, and then it is never auto-mounted
again. 
       The kernel doesn't allow unmounting the direct mountpoint itself,
making it impossible to restart Amd without rebooting. 


How reproducible:



Additional info:

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

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

Comment 1 Nalin Dahyabhai 2001-06-26 05:24:42 UTC
Reclassifying for kernel, as this is where the patches go.

Comment 2 Arjan van de Ven 2001-06-26 09:57:14 UTC
Is this patch sent to Linus / Alan ?

Comment 3 Bugzilla owner 2004-09-30 15:39:02 UTC
Thanks for the bug report. However, Red Hat no longer maintains this version of
the product. Please upgrade to the latest version and open a new bug if the problem
persists.

The Fedora Legacy project (http://fedoralegacy.org/) maintains some older releases, 
and if you believe this bug is interesting to them, please report the problem in
the bug tracker at: http://bugzilla.fedora.us/



Note You need to log in before you can comment on or make changes to this bug.