lkml.org 
[lkml]   [2002]   [Mar]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    Date
    From
    SubjectRe: BUG REPORT: kernel nfs between 2.4.19-pre2 (server) and 2.2.21-pre3 (client)
    Hello!

    On Mon, Mar 11, 2002 at 01:47:17PM +0100, Stephan von Krawczynski wrote:
    > What else can I try?
    > I checked the setup with another client kernel 2.4.18, and guess what: it has
    > the same problem. I have the impression that the problem is somewhere on the
    > nfs server side - possibly around the umount case. Trond, Ken?
    Just to be sure - have you tried 2.4.17 at the server?
    2.4.18 have 2 patches included that were supposed to have another
    stale filehandle problem resolved.
    Our test have not shown any problems, but I am interested can you still
    reproduce with these 2 patches reversed off the 2.4.18?
    Also if you still can trigger, apply back only 1st hunk of G-... patch.

    Bye,
    Oleg
    --- linux.orig/fs/reiserfs/inode.c Mon, 11 Feb 2002 12:21:42 -0500
    +++ linux/fs/reiserfs/inode.c Mon, 18 Feb 2002 19:43:55 -0500
    @@ -1207,7 +1211,8 @@
    struct reiserfs_iget4_args *args;

    args = opaque;
    - return INODE_PKEY( inode ) -> k_dir_id == args -> objectid;
    + /* args is already in CPU order */
    + return le32_to_cpu(INODE_PKEY(inode)->k_dir_id) == args -> objectid;
    }

    struct inode * reiserfs_iget (struct super_block * s, const struct cpu_key * key)
    --- linux/fs/reiserfs/inode.c.o Fri Feb 1 14:08:22 2002
    +++ linux/fs/reiserfs/inode.c Fri Feb 1 14:09:40 2002
    @@ -1156,6 +1156,7 @@
    /* a stale NFS handle can trigger this without it being an error */
    pathrelse (&path_to_sd);
    make_bad_inode(inode) ;
    + inode->i_nlink = 0;
    return;
    }

    @@ -1188,6 +1189,27 @@

    }

    +/**
    + * reiserfs_find_actor() - "find actor" reiserfs supplies to iget4().
    + *
    + * @inode: inode from hash table to check
    + * @inode_no: inode number we are looking for
    + * @opaque: "cookie" passed to iget4(). This is &reiserfs_iget4_args.
    + *
    + * This function is called by iget4() to distinguish reiserfs inodes
    + * having the same inode numbers. Such inodes can only exist due to some
    + * error condition. One of them should be bad. Inodes with identical
    + * inode numbers (objectids) are distinguished by parent directory ids.
    + *
    + */
    +static int reiserfs_find_actor( struct inode *inode,
    + unsigned long inode_no, void *opaque )
    +{
    + struct reiserfs_iget4_args *args;
    +
    + args = opaque;
    + return INODE_PKEY( inode ) -> k_dir_id == args -> objectid;
    +}

    struct inode * reiserfs_iget (struct super_block * s, const struct cpu_key * key)
    {
    @@ -1195,7 +1217,8 @@
    struct reiserfs_iget4_args args ;

    args.objectid = key->on_disk_key.k_dir_id ;
    - inode = iget4 (s, key->on_disk_key.k_objectid, 0, (void *)(&args));
    + inode = iget4 (s, key->on_disk_key.k_objectid,
    + reiserfs_find_actor, (void *)(&args));
    if (!inode)
    return ERR_PTR(-ENOMEM) ;
    \
     
     \ /
      Last update: 2005-03-22 13:24    [W:0.031 / U:88.880 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site