From owner-freebsd-current@FreeBSD.ORG Sun Jul 17 16:59:49 2005 Return-Path: X-Original-To: freebsd-current@freebsd.org Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1FB7E16A41C for ; Sun, 17 Jul 2005 16:59:49 +0000 (GMT) (envelope-from rodrigc@crodrigues.org) Received: from rwcrmhc11.comcast.net (rwcrmhc11.comcast.net [204.127.198.35]) by mx1.FreeBSD.org (Postfix) with ESMTP id B440843D49 for ; Sun, 17 Jul 2005 16:59:48 +0000 (GMT) (envelope-from rodrigc@crodrigues.org) Received: from c-66-30-114-143.hsd1.ma.comcast.net ([66.30.114.143]) by comcast.net (rwcrmhc11) with ESMTP id <2005071716594701300rk85ae>; Sun, 17 Jul 2005 16:59:47 +0000 Received: from c-66-30-114-143.hsd1.ma.comcast.net (localhost.127.in-addr.arpa [127.0.0.1]) by c-66-30-114-143.hsd1.ma.comcast.net (8.13.4/8.13.1) with ESMTP id j6HGxjYr001028; Sun, 17 Jul 2005 12:59:46 -0400 (EDT) (envelope-from rodrigc@c-66-30-114-143.hsd1.ma.comcast.net) Received: (from rodrigc@localhost) by c-66-30-114-143.hsd1.ma.comcast.net (8.13.4/8.13.1/Submit) id j6HGxjXU001027; Sun, 17 Jul 2005 12:59:45 -0400 (EDT) (envelope-from rodrigc) Date: Sun, 17 Jul 2005 12:59:45 -0400 From: Craig Rodrigues To: "Wojciech A. Koszek" Message-ID: <20050717165945.GA1017@crodrigues.org> References: <20050716224442.GA87607@freebsd.czest.pl> <20050717153936.GA2218@crodrigues.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20050717153936.GA2218@crodrigues.org> User-Agent: Mutt/1.5.9i Cc: freebsd-current@freebsd.org Subject: Re: [LOR] kqueue() X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 17 Jul 2005 16:59:49 -0000 On Sun, Jul 17, 2005 at 11:39:36AM -0400, Craig Rodrigues wrote: > On Sat, Jul 16, 2005 at 10:44:43PM +0000, Wojciech A. Koszek wrote: > > http://FreeBSD.czest.pl/dunstan/kqueuetest.c > > I can reproduce this LOR: > > It looks like on line 1545 of kern_event.c, we have a KQ_LOCK(kq);, > and then on line 1039, the KQ_NOTOWNED(kq); assertion fails, because > the lock is never released. Can you try this patch: --- /usr/src/sys/kern/kern_event.c.orig Sun Jul 17 12:32:58 2005 +++ /usr/src/sys/kern/kern_event.c Sun Jul 17 12:41:54 2005 @@ -410,7 +410,15 @@ kev.fflags = kn->kn_sfflags; kev.data = kn->kn_id; /* parent */ kev.udata = kn->kn_kevent.udata; /* preserve udata */ + + if (kn->kn_status & KN_HASKQLOCK) + KQ_UNLOCK(kn->kn_kq); + error = kqueue_register(kn->kn_kq, &kev, NULL, 0); + + if (kn->kn_status & KN_HASKQLOCK) + KQ_LOCK(kn->kn_kq); + if (error) kn->kn_fflags |= NOTE_TRACKERR; } I don't get the crash any more, but sometimes I get this LOR in dmesg: lock order reversal 1st 0xc1b0aaa4 process lock (process lock) @ /usr/src/sys/kern/kern_fork.c:690 2nd 0xc092dba0 allproc (allproc) @ /usr/src/sys/kern/kern_proc.c:229 KDB: stack backtrace: kdb_backtrace(0,ffffffff,c0943620,c0943710,c08eb0ac) at kdb_backtrace+0x29 witness_checkorder(c092dba0,1,c087a870,e5) at witness_checkorder+0x564 _sx_slock(c092dba0,c087a870,e5,c18af2a8,c18af220) at _sx_slock+0x50 pfind(36c,c18af2a8,d15d4c50,c18af24c,d15d4c24) at pfind+0x1c filt_procattach(c18af220,0,fffffffb,0,0) at filt_procattach+0x16 kqueue_register(c1b14900,d15d4c3c,0,0,36c) at kqueue_register+0x5c3 filt_proc(c18af2a8,4000036c) at filt_proc+0xcc knote(c1b0abf0,4000036c,1,d15d4cc0,d15d4cb0) at knote+0x98 fork1(c18cec80,14,0,d15d4cd4,d15d4d30) at fork1+0xed4 fork(c18cec80,d15d4d04,0,a,246) at fork+0x18 syscall(3b,3b,3b,bfbfea00,14) at syscall+0x22f Xint0x80_syscall() at Xint0x80_syscall+0x1f