Peter Wemm wrote:

I should have added more info:

[..]
> #8  0xc015bb0d in panic (fmt=0xc02c2c40 "softdep_disk_write_complete: lock is
     held")
>     at ../../kern/kern_shutdown.c:554
> #9  0xc0223f24 in softdep_disk_write_complete (bp=0xc636c3e8) at ../../ufs/ff
    s/ffs_softdep.c:2993
> #10 0xc017dbf2 in vfs_backgroundwritedone (bp=0xc636c3e8) at ../../kern/vfs_b
    io.c:706
> #11 0xc0180117 in biodone (bp=0xc636c3e8) at ../../kern/vfs_bio.c:2708
> #12 0xc012c0ad in dadone (periph=0xc1028580, done_ccb=0xc10ee400) at ../../ca
    m/scsi/scsi_da.c:1219
[..]

(kgdb) list
2988            struct inodedep *inodedep;
2989            struct bmsafemap *bmsafemap;
2990
2991    #ifdef DEBUG
2992            if (lk.lkt_held != -1)
2993                    panic("softdep_disk_write_complete: lock is held");
2994            lk.lkt_held = -2;
2995    #endif
2996            LIST_INIT(&reattach);
2997            while ((wk = LIST_FIRST(&bp->b_dep)) != NULL) {
(kgdb) print lk
$1 = {lkt_spl = 0, lkt_held = 412}
(kgdb) proc 412

(kgdb) where
#0  mi_switch () at ../../kern/kern_synch.c:828
#1  0xc015e8c5 in tsleep (ident=0xc635d5be, priority=16, wmesg=0xc02c34a0 "getbuf", 
timo=0)
    at ../../kern/kern_synch.c:437
#2  0xc0225f4b in getdirtybuf (bpp=0xed502e80, waitfor=1) at 
../../ufs/ffs/ffs_softdep.c:4566
#3  0xc02255e1 in flush_inodedep_deps (fs=0xc1066000, ino=405404) at 
../../ufs/ffs/ffs_softdep.c:4104
#4  0xc0224f73 in softdep_sync_metadata (ap=0xed502f28) at 
../../ufs/ffs/ffs_softdep.c:3823
#5  0xc022933c in ffs_fsync (ap=0xed502f28) at ../../ufs/ffs/ffs_vnops.c:249
#6  0xc018a971 in fsync (p=0xed49e480, uap=0xed502f80) at vnode_if.h:537
#7  0xc02884be in syscall (frame={tf_fs = 47, tf_es = 47, tf_ds = 47, tf_edi = 
152052608, tf_esi = 0, 
      tf_ebp = -1077942672, tf_isp = -313511980, tf_ebx = 23, tf_edx = 23, tf_ecx = 3, 
tf_eax = 118, 
      tf_trapno = 12, tf_err = 2, tf_eip = 684704813, tf_cs = 31, tf_eflags = 514, 
tf_esp = -1077942692, 
      tf_ss = 47}) at ../../i386/i386/trap.c:1055
#8  0xc027c806 in Xint0x80_syscall ()

It would seem that getdirtybuf() is sleeping while holding the global
softupdates 'lk' lock.

This is in the new code Kirk added in rev 1.49.

Cheers,
-Peter
--
Peter Wemm - [EMAIL PROTECTED]; [EMAIL PROTECTED]; [EMAIL PROTECTED]
"All of this is for nothing if we don't go to the stars" - JMS/B5



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to