NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/39777: NFS client triggers kernel panics



The following reply was made to PR kern/39777; it has been noted by GNATS.

From: Matthias Scheler <tron%zhadum.org.uk@localhost>
To: netbsd-bugs%NetBSD.org@localhost
Cc: gnats-bugs%NetBSD.org@localhost
Subject: Re: kern/39777: NFS client triggers kernel panics
Date: Fri, 31 Oct 2008 19:00:12 +0000

 On Fri, Oct 31, 2008 at 06:30:11PM +0000, Matthias Scheler wrote:
 > This looks like a stack overflow to me.
 
 It seems that I'm right. The following change caused the problem:
 
 http://mail-index.netbsd.org/source-changes/2008/10/17/msg211423.html
 
 If I reduce the size of the stack arrays like this ...
 
 Index: nfs_bio.c
 ===================================================================
 RCS file: /cvsroot/src/sys/nfs/nfs_bio.c,v
 retrieving revision 1.179
 diff -u -r1.179 nfs_bio.c
 --- nfs_bio.c  17 Oct 2008 14:24:43 -0000      1.179
 +++ nfs_bio.c  31 Oct 2008 18:57:40 -0000
 @@ -921,7 +921,7 @@
        int iomode;
        bool stalewriteverf = false;
        int i, npages = (bp->b_bcount + PAGE_SIZE - 1) >> PAGE_SHIFT;
 -      struct vm_page **pgs, *spgs[64];
 +      struct vm_page **pgs, *spgs[16];
  #ifndef NFS_V2_ONLY
        bool needcommit = true; /* need only COMMIT RPC */
  #else
 @@ -1224,7 +1224,7 @@
        struct uvm_object *uobj = &vp->v_uobj;
        struct nfsnode *np = VTONFS(vp);
        const int npages = *ap->a_count;
 -      struct vm_page *pg, **pgs, **opgs, *spgs[64];
 +      struct vm_page *pg, **pgs, **opgs, *spgs[16];
        off_t origoffset, len;
        int i, error;
        bool v3 = NFS_ISV3(vp);
 
 ... the machine doesn't panic.
 
 But that is probably not an appropriate fix. I wonder whether the stack
 optimization should be eliminated.
 
        Kind regards
 
 -- 
 Matthias Scheler                                  http://zhadum.org.uk/
 


Home | Main Index | Thread Index | Old Index