Date: Thu, 13 Jan 2000 23:07:39 +0800 From: Peter Wemm <peter@netplex.com.au> To: mckusick@mckusick.org Cc: current@freebsd.org Subject: Re: softupdates still broken! Message-ID: <20000113150740.002261CD4@overcee.netplex.com.au> In-Reply-To: Message from Peter Wemm <peter@netplex.com.au> of "Thu, 13 Jan 2000 22:36:20 %2B0800." <20000113143620.3B4E51CD4@overcee.netplex.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
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 - peter@FreeBSD.org; peter@yahoo-inc.com; peter@netplex.com.au "All of this is for nothing if we don't go to the stars" - JMS/B5 To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000113150740.002261CD4>