On Wed, Sep 28, 2011 at 04:27:39PM +0300, Jaakko Heinonen wrote: > On 2011-09-28, Anton Shterenlikht wrote: > > KDB: stack backtrace: > > getenv with the following non-sleepable locks held: > > exclusive sleep mutex vnode interlock (vnode interlock) r = 0 > > (0xe000000011950488) locked @ /usr/src/sys/fs/devfs/devfs_vnops.c:406 > > > > etc. until a hang, requiring cold reset via MP. > > Someone is calling getenv with a vnode interlock held. You need to > figure out the caller. Unfortunately the backtrace is missing above. > > As a temporary workaround you could comment the WITNESS_WARN() line in > getenv() (sys/kern/kern_environment.c) but it is not a real fix.
I do not think that this is the real cause of the panic. Line 406 in devfs_vnops.c belongs to devfs_allocv(), and vnode interlock taken there must be consumed by LK_INTERLOCK call to vget(). The getenv() cannot be called from the vget() or two unlock calls between lines 406 and 409. It seems there is something broken elsewere.
pgpP9hKdJwqiy.pgp
Description: PGP signature