panic: lock (sleep mutex) vnode interlock not locked @ /usr/src/sys/kern/vfs_subr.c:750

Pawel Worach pawel.worach at gmail.com
Thu Aug 4 18:16:31 GMT 2005


Hi Jeff, list,

Similar panic was reported some time ago with an almost identical stack trace.
This also happened while updating src/ sources using cvs. I can't
repro it on demand.

FreeBSD 7.0-CURRENT #0: Thu Aug  4 04:18:30 CEST 2005 with sources
from about four hours earlier. Hardware is dual Xeon + HTT, SMP
kernel, no INVARIANTS or WITNESS.
# ident /sys/kern/vfs_subr.c
/sys/kern/vfs_subr.c:
     $FreeBSD: src/sys/kern/vfs_subr.c,v 1.637 2005/08/03 05:36:50 jeff Exp $

panic: lock (sleep mutex) vnode interlock not locked @
/usr/src/sys/kern/vfs_subr.c:750
cpuid = 0
KDB: stack backtrace:
kdb_backtrace(c06d5257,0,c06bf853,e5108c14,c23a8a80) at kdb_backtrace+0x2e
panic(c06bf853,c06cf69c,c06bf19a,c06c48b6,2ee) at panic+0x139
witness_unlock(c472e8fc,8,c06c48b6,2ee,c472e880) at witness_unlock+0xda
_mtx_unlock_flags(c472e8fc,0,c06c48b6,2ee,c472e880) at _mtx_unlock_flags+0x8a
vdestroy(c472e880,0,c472e880,c472e880,c472e880) at vdestroy+0x237
vdropl(c472e880,e5108cb4,c06c48b6,24e,7) at vdropl+0x50
vlrureclaim(c25ec800,0,c06c48b6,2b1,3e8) at vlrureclaim+0x262
vnlru_proc(0,e5108d38,c06b8f6d,30d,0) at vnlru_proc+0x20d
fork_exit(c057d3e0,0,e5108d38) at fork_exit+0xc1
fork_trampoline() at fork_trampoline+0x8
--- trap 0x1, eip = 0, esp = 0xe5108d6c, ebp = 0 ---
Uptime: 15h3m41s
Dumping 1023 MB (2 chunks)
  chunk 0: 1MB (157 pages) ... ok
  chunk 1: 1023MB (261851 pages) 1007 991 975 959 943 927 911 895 879
863 847 831 815 799 783 767 751 735 719 703 687 671 655 639 623 607
591 575 559 543 527 511 495 479 463 447 431 415 399 383 367 351 335
319 303 287 271 255 239 223 207 191 175 159 143 127 111 95 79 63 47 31
15

(kgdb) bt
#0  doadump () at pcpu.h:165
#1  0xc051695a in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:397
#2  0xc0516d34 in panic (fmt=0xc06bf853 "lock (%s) %s not locked @ %s:%d")
    at /usr/src/sys/kern/kern_shutdown.c:553
#3  0xc054201a in witness_unlock (lock=0xc472e8fc, flags=8,
    file=0xc06c48b6 "/usr/src/sys/kern/vfs_subr.c", line=750)
    at /usr/src/sys/kern/subr_witness.c:1133
#4  0xc050c86a in _mtx_unlock_flags (m=0xc472e8fc, opts=0,
    file=0xc06c48b6 "/usr/src/sys/kern/vfs_subr.c", line=750)
    at /usr/src/sys/kern/kern_mutex.c:297
#5  0xc057d907 in vdestroy (vp=0xc472e880) at /usr/src/sys/kern/vfs_subr.c:750
#6  0xc0580500 in vdropl (vp=0xc472e880) at /usr/src/sys/kern/vfs_subr.c:2110
#7  0xc057d182 in vlrureclaim (mp=0xc25ec800)
    at /usr/src/sys/kern/vfs_subr.c:593
#8  0xc057d5ed in vnlru_proc () at /usr/src/sys/kern/vfs_subr.c:693
#9  0xc04fdd41 in fork_exit (callout=0xc057d3e0 <vnlru_proc>, arg=0x0,
    frame=0x0) at /usr/src/sys/kern/kern_fork.c:789
#10 0xc067716c in fork_trampoline () at /usr/src/sys/i386/i386/exception.s:208
(kgdb) frame 5
#5  0xc057d907 in vdestroy (vp=0xc472e880) at /usr/src/sys/kern/vfs_subr.c:750
750             VI_UNLOCK(vp);
(kgdb) print *vp
$1 = {v_type = VBAD, v_tag = 0xc06b46ed "none", v_op = 0xc06e56a0,
  v_data = 0x0, v_mount = 0x0, v_nmntvnodes = {tqe_next = 0x0,
    tqe_prev = 0xc3140ab4}, v_un = {vu_mount = 0x0, vu_socket = 0x0,
    vu_cdev = 0x0, vu_fifoinfo = 0x0}, v_hashlist = {le_next = 0xc4ad7440,
    le_prev = 0xc24af9bc}, v_hash = 200297, v_cache_src = {lh_first = 0x0},
  v_cache_dst = {tqh_first = 0x0, tqh_last = 0xc472e8b0}, v_dd = 0x0,
  v_cstart = 0, v_lasta = 0, v_lastw = 0, v_clen = 0, v_lock = {
    lk_interlock = 0xc0713238, lk_flags = 64, lk_sharecount = 0,
    lk_waitcount = 0, lk_exclusivecount = 0, lk_prio = 80,
    lk_wmesg = 0xc06c2905 "ufs", lk_timo = 51, lk_lockholder = 0xffffffff,
    lk_newlock = 0x0}, v_interlock = {mtx_object = {lo_class = 0xc06ec084,
      lo_name = 0xc06bf19a "vnode interlock",
      lo_type = 0xc06bf19a "vnode interlock", lo_flags = 196608, lo_list = {
        tqe_next = 0xc4a028fc, tqe_prev = 0xc533c19c},
      lo_witness = 0xc0724b10}, mtx_lock = 4, mtx_recurse = 0},
  v_vnlock = 0xc472e8d8, v_holdcnt = 0, v_usecount = 0, v_iflag = 128,
  v_vflag = 0, v_writecount = 0, v_freelist = {tqe_next = 0xc3c37770,
    tqe_prev = 0xc0762170}, v_bufobj = {bo_mtx = 0xc472e8fc, bo_clean = {
      bv_hd = {tqh_first = 0x0, tqh_last = 0xc472e944}, bv_root = 0x0,
      bv_cnt = 0}, bo_dirty = {bv_hd = {tqh_first = 0x0,
        tqh_last = 0xc472e954}, bv_root = 0x0, bv_cnt = 0}, bo_numoutput = 0,
    bo_flag = 0, bo_ops = 0xc06f2f64, bo_bsize = 16384, bo_object = 0x0,
    bo_synclist = {le_next = 0x0, le_prev = 0x0}, bo_private = 0xc472e880,
    __bo_vnode = 0xc472e880}, v_pollinfo = 0x0, v_label = 0x0}
(kgdb) list
745             VNASSERT(bo->bo_clean.bv_root == NULL, vp,
("cleanblkroot not NULL"));
746             VNASSERT(bo->bo_dirty.bv_cnt == 0, vp, ("dirtybufcnt not 0"));
747             VNASSERT(bo->bo_dirty.bv_root == NULL, vp,
("dirtyblkroot not NULL"));
748             VNASSERT(TAILQ_EMPTY(&vp->v_cache_dst), vp, ("vp has
namecache dst"));
749             VNASSERT(LIST_EMPTY(&vp->v_cache_src), vp, ("vp has
namecache src"));
750             VI_UNLOCK(vp);
751     #ifdef MAC
752             mac_destroy_vnode(vp);
753     #endif
754             if (vp->v_pollinfo != NULL) {
(kgdb)

vmcore and kernel.debug archived in case more info is needed.

-- 
Pawel


More information about the freebsd-current mailing list