kern/87861: "panic: initiate_write_inodeblock_ufs2: already started" on 6.0-RC1

Frank Mayhar frank at exit.com
Wed Oct 26 13:30:27 PDT 2005


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

From: Frank Mayhar <frank at exit.com>
To: bug-followup at FreeBSD.org
Cc:  
Subject: Re: kern/87861: "panic: initiate_write_inodeblock_ufs2: already
	started" on 6.0-RC1
Date: Wed, 26 Oct 2005 13:28:33 -0700

 More information.  I built the kernel with INVARIANTS and managed to
 catch a KASSERT() at the beginning of bundirty():
 	panic: bundirty: buffer 0xd6d6cc00 still on queue 1
 
 Queue 1 is the QUEUE_CLEAN queue, for (from the commentary)
 "non-B_DELWRI buffers."
 
 The buffer in question looks like:
 (kgdb) print $buf
 $4 = (struct buf *) 0xd6d6cc00
 (kgdb) print *$buf
 $5 = {
   b_bufobj = 0xc4dff2e0, 
   b_bcount = 0x4000, 
   b_caller1 = 0x0, 
   b_data = 0xda0c5000 "", 
   b_error = 0x10, 
   b_iocmd = 0x2, 
   b_ioflags = 0x2, 
   b_iooffset = 0xed9a84000, 
   b_resid = 0x4000, 
   b_iodone = 0, 
   b_blkno = 0x76cd420, 
   b_offset = 0xed9a84000, 
   b_bobufs = {
     tqe_next = 0xd6e265f0, 
     tqe_prev = 0xc4dff2f4
   }, 
   b_left = 0x0, 
   b_right = 0x0, 
   b_vflags = 0x0, 
   b_freelist = {
     tqe_next = 0xd6d16960, 
     tqe_prev = 0xc06f75a8
   }, 
   b_qindex = 0x1, 
   b_flags = 0xa084, 
   b_xflags = 0x21, 
   b_lock = {
     lk_interlock = 0xc06a8368, 
     lk_flags = 0x40000, 
     lk_sharecount = 0x0, 
     lk_waitcount = 0x0, 
     lk_exclusivecount = 0x1, 
     lk_prio = 0x50, 
     lk_wmesg = 0xc0655b94 "bufwait", 
     lk_timo = 0x0, 
     lk_lockholder = 0xfffffffe, 
     lk_newlock = 0x0
   }, 
   b_bufsize = 0x4000, 
   b_runningbufspace = 0x0, 
   b_kvabase = 0xda0c5000 "", 
   b_kvasize = 0x4000, 
   b_lblkno = 0x76cd420, 
   b_vp = 0xc4dff220, 
   b_dirtyoff = 0x0, 
   b_dirtyend = 0x0, 
   b_rcred = 0x0, 
   b_wcred = 0x0, 
   b_saveaddr = 0xda0c5000, 
   b_pager = {
     pg_reqpage = 0x0
   }, 
   b_cluster = {
     cluster_head = {
       tqh_first = 0xd6e257d8, 
       tqh_last = 0xd6dbeb70
     }, 
     cluster_entry = {
       tqe_next = 0xd6e257d8, 
       tqe_prev = 0xd6dbeb70
     }
   }, 
   b_pages = {0xc29d8868, 0xc29d91b0, 0xc29dacf8, 0xc29c1840, 0x0
 <repeats 28 times>}, 
   b_npages = 0x4, 
   b_dep = {
     lh_first = 0x0
   }
 }
 (kgdb) print *$buf->b_bufobj
 $8 = {
   bo_mtx = 0xc4dff29c, 
   bo_clean = {
     bv_hd = {
       tqh_first = 0xd6cda498, 
       tqh_last = 0xd6e13e30
     }, 
     bv_root = 0xd6dcd908, 
     bv_cnt = 0xf
   }, 
   bo_dirty = {
     bv_hd = {
       tqh_first = 0xd6d6cc00, 
       tqh_last = 0xd6d2a380
     }, 
     bv_root = 0xd6e81bd8, 
     bv_cnt = 0x27
   }, 
   bo_numoutput = 0x7, 
   bo_flag = 0x1, 
   bo_ops = 0xc0694b9c, 
   bo_bsize = 0x200, 
   bo_object = 0xc596f210, 
   bo_synclist = {
     le_next = 0xc50623f0, 
     le_prev = 0xc2d6b320
   }, 
   bo_private = 0xc47e0480, 
   __bo_vnode = 0xc4dff220
 }
 
 Somewhat more interesting is this error message from just before the
 panic.  There are 200+ of these messages, but this one appears to be
 associated with this buffer, since the offset and length match:
 
 g_vfs_done():da6s1e[WRITE(offset=63781224448, length=16384)]error = 16
 
 Error 16 is EBUSY.
 
 Unfortunately the stack is messed up (apparently because of a panic
 cascade) so I can't extract a backtrace for this one.
 -- 
 Frank Mayhar frank at exit.com     http://www.exit.com/
 Exit Consulting                 http://www.gpsclock.com/
                                 http://www.exit.com/blog/frank/


More information about the freebsd-bugs mailing list