Date: Tue, 23 Mar 1999 17:07:13 +1030 From: Greg Lehey <grog@lemis.com> To: FreeBSD current users <FreeBSD-current@FreeBSD.ORG> Subject: Help needed with hangs associated with vfs locking Message-ID: <19990323170713.H442@lemis.com>
next in thread | raw e-mail | index | archive | help
A system I'm looking at continually runs into deadlocks when doing a 'make -j20 world'. This appears to happen only when the file system is mounted on a vinum volume, and it possibly also requires softupdates, though I haven't confirmed this yet. I initially thought that this was a vinum problem, and though I can't exclude the possibility, it's beginning to look less like it (since vinum doesn't perform this kind of locking). I currently suspect that vinum acts as a catalyst by issuing disk multiple I/O requests in a very short space of time. Typically, the hanging processes' stack looks like: pid proc addr uid ppid pgrp flag wchan stat comm wchan 65139 f3f6bd00 f3f6c000 0 0 556 004006 3 ld inode f0bb3e00 Check your .gdbinit, it contains a y command frame 0 at 0xf3f6dc10: ebp f3f6dc2c, eip 0xf0134141 <tsleep+333>: movb 0xfd(%ebx),%al frame 1 at 0xf3f6dc2c: ebp f3f6dc50, eip 0xf012dd23 <acquire+139>: movl %eax,%esi frame 2 at 0xf3f6dc50: ebp f3f6dc74, eip 0xf012dfe5 <debuglockmgr+637>: movl %eax,0xfffffffc(%ebp) frame 3 at 0xf3f6dc74: ebp f3f6dc98, eip 0xf015457d <vop_stdlock+49>: leave frame 4 at 0xf3f6dc98: ebp f3f6dca4, eip 0xf01c8b35 <ufs_vnoperate+21>: leave frame 5 at 0xf3f6dca4: ebp f3f6dccc, eip 0xf015d7dd <debug_vn_lock+85>: addl $0x4,%esp frame 6 at 0xf3f6dccc: ebp f3f6dcf0, eip 0xf01571a9 <vget+113>: movl %eax,%esi frame 7 at 0xf3f6dcf0: ebp f3f6dd3c, eip 0xf015300b <vfs_cache_lookup+375>: movl %eax,%ebx frame 8 at 0xf3f6dd3c: ebp f3f6dd48, eip 0xf01c8b35 <ufs_vnoperate+21>: leave frame 9 at 0xf3f6dd48: ebp f3f6dd94, eip 0xf01557ad <lookup+729>: movl %eax,0xffffffcc(%ebp) frame 10 at 0xf3f6dd94: ebp f3f6ddf0, eip 0xf0155182 <namei+458>: movl %eax,0xffffffc0(%ebp) frame 11 at 0xf3f6ddf0: ebp f3f6df54, eip 0xf012bef1 <execve+257>: movl %eax,0xfffffebc(%ebp) frame 12 at 0xf3f6df54: ebp f3f6dfa4, eip 0xf01f07ab <syscall+295>: addl $0x8,%esp The lock manipulated by (debug)lockmgr shows: $1 = { lk_interlock = { lock_data = 0 }, lk_flags = 3146240, lk_sharecount = 1, lk_waitcount = 2, lk_exclusivecount = 0, lk_prio = 8, lk_wmesg = 0xf0216943 "inode", lk_timo = 0, lk_lockholder = -1, lk_filename = 0xf020fdfb "../../kern/vfs_subr.c", lk_lockername = 0xf020fa73 "vop_stdlock", lk_lineno = 1268 } The locker call was from vget(). The associated vnode shows that it's mounted on a vinum volume, which in this build was used for the /usr/obj hierarchy. In the example I'm showing here, the file was /usr/obj/usr/src/tmp/usr/libexec/elf/mld. I have lots more information available, but I don't want to put it all in here. If you think you recognize the problem, or if you have a suggestion about how to approach it, I'd be pleased to hear from you, either in this forum or privately. Greg -- See complete headers for address, home page and phone numbers finger grog@lemis.com for PGP public key 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?19990323170713.H442>