Current-Users archive

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

Re: panic: biodone2 already



On Mon, Sep 01, 2008 at 07:22:15PM +0200, Lars Nordlund wrote:
> Hi
> 
> Got this panic while writing a DVD+RW last night. I am running NetBSD
> 4.99.72/amd64. Kernel message hand-copied from screen..
> 
> panic: biodone2 already

Lars,
please check if you see this or a related panic with the diff attached.

-- 
Juergen Hannken-Illjes - hannken%eis.cs.tu-bs.de@localhost - TU Braunschweig 
(Germany)

Index: sys/sys/buf.h
===================================================================
RCS file: /cvsroot/src/sys/sys/buf.h,v
retrieving revision 1.110
diff -p -u -4 -r1.110 buf.h
--- sys/sys/buf.h       31 Jul 2008 05:38:05 -0000      1.110
+++ sys/sys/buf.h       11 Sep 2008 13:14:55 -0000
@@ -130,8 +130,9 @@ struct buf {
 #endif /* defined(_KERNEL) */
        } b_u;                                  /* b: device driver queue */
 #define        b_actq  b_u.u_actq
 #define        b_work  b_u.u_work
+       TAILQ_ENTRY(buf)        b_doneq;        /* b: per cpu biodone queue */
        void                    (*b_iodone)(struct buf *);/* b: call when done 
*/
        int                     b_error;        /* b: errno value. */
        int                     b_resid;        /* b: remaining I/O. */
        u_int                   b_flags;        /* b: B_* flags */
Index: sys/kern/vfs_bio.c
===================================================================
RCS file: /cvsroot/src/sys/kern/vfs_bio.c,v
retrieving revision 1.210
diff -p -u -4 -r1.210 vfs_bio.c
--- sys/kern/vfs_bio.c  11 Sep 2008 09:14:46 -0000      1.210
+++ sys/kern/vfs_bio.c  11 Sep 2008 13:14:54 -0000
@@ -1543,9 +1543,9 @@ biodone(buf_t *bp)
 
        if (cpu_intr_p()) {
                /* From interrupt mode: defer to a soft interrupt. */
                s = splvm();
-               TAILQ_INSERT_TAIL(&curcpu()->ci_data.cpu_biodone, bp, b_actq);
+               TAILQ_INSERT_TAIL(&curcpu()->ci_data.cpu_biodone, bp, b_doneq);
                softint_schedule(biodone_sih);
                splx(s);
        } else {
                /* Process now - the buffer may be freed soon. */
@@ -1606,9 +1606,9 @@ biointr(void *cookie)
                KASSERT(curcpu() == ci);
 
                s = splvm();
                bp = TAILQ_FIRST(&ci->ci_data.cpu_biodone);
-               TAILQ_REMOVE(&ci->ci_data.cpu_biodone, bp, b_actq);
+               TAILQ_REMOVE(&ci->ci_data.cpu_biodone, bp, b_doneq);
                splx(s);
 
                biodone2(bp);
        }


Home | Main Index | Thread Index | Old Index