Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 23 Nov 2004 19:09:46 +0000 (GMT)
From:      Robert Watson <rwatson@freebsd.org>
To:        "M. Warner Losh" <imp@bsdimp.com>
Cc:        current@freebsd.org
Subject:   Re: Known LoR?
Message-ID:  <Pine.NEB.3.96L.1041123190526.66539Z-100000@fledge.watson.org>
In-Reply-To: <20041123.120420.118628298.imp@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 23 Nov 2004, M. Warner Losh wrote:

> Noticed this has startted popping up when I do a ispell-buffer in emacs. 
> Anybody know what's going on with it? 

Looks like it's somewhat Poul-Henning's fault :-).  The pipe mutex isn't
needed over the call to fsetown(), so you can just PIPE_UNLOCK(mpipe)
before calling fsetown (make sure to get both uses) in the ioctl code
before jumping to the end.  The sigio uses its own mutexes to protect
sigio data, and the reference to the pipe is still held by the caller.

Robert N M Watson             FreeBSD Core Team, TrustedBSD Projects
robert@fledge.watson.org      Principal Research Scientist, McAfee Research
.


> 
> Warner
> 
> malloc(M_WAITOK) of "32", forcing M_NOWAIT with the following non-sleepable locks held:
> exclusive sleep mutex pipe mutex r = 0 (0xc1d272d8) locked @ kern/sys_pipe.c:1263
> KDB: stack backtrace:
> kdb_backtrace(1,1,1,20,c1045540) at kdb_backtrace+0x29
> witness_warn(5,0,c0621990,c0623a84,c06663e0) at witness_warn+0x19a
> uma_zalloc_arg(c1045540,0,2) at uma_zalloc_arg+0x41
> malloc(14,c063ac00,2,c1d27180,80047476) at malloc+0xae
> fsetown(fffffc88,c1d27214,0,0,80047476) at fsetown+0x32
> pipe_ioctl(c206f000,80047476,c1bb1640,c205f080,c1d48c00) at pipe_ioctl+0x11a
> ioctl(c1d48c00,e6a37d14,3,0,206) at ioctl+0x370
> syscall(2f,2f,bfbf002f,bfbfdd28,7) at syscall+0x213
> Xint0x80_syscall() at Xint0x80_syscall+0x1f
> --- syscall (54, FreeBSD ELF32, ioctl), eip = 0x284b210b, esp = 0xbfbfdc7c, ebp = 0xbfbfdc98 ---
> lock order reversal
>  1st 0xc1d272d8 pipe mutex (pipe mutex) @ kern/sys_pipe.c:1263
>  2nd 0xc06626c0 proctree (proctree) @ kern/kern_descrip.c:881
> KDB: stack backtrace:
> kdb_backtrace(0,ffffffff,c0668298,c0668338,c063edac) at kdb_backtrace+0x29
> witness_checkorder(c06626c0,1,c060ae84,371) at witness_checkorder+0x54c
> _sx_slock(c06626c0,c060ae7b,371,c205f080) at _sx_slock+0x50
> fsetown(fffffc88,c1d27214,0,0,80047476) at fsetown+0x6b
> pipe_ioctl(c206f000,80047476,c1bb1640,c205f080,c1d48c00) at pipe_ioctl+0x11a
> ioctl(c1d48c00,e6a37d14,3,0,206) at ioctl+0x370
> syscall(2f,2f,bfbf002f,bfbfdd28,7) at syscall+0x213
> Xint0x80_syscall() at Xint0x80_syscall+0x1f
> --- syscall (54, FreeBSD ELF32, ioctl), eip = 0x284b210b, esp = 0xbfbfdc7c, ebp = 0xbfbfdc98 ---
> _______________________________________________
> freebsd-current@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.NEB.3.96L.1041123190526.66539Z-100000>