From owner-freebsd-current@FreeBSD.ORG Fri Aug 3 10:21:29 2007 Return-Path: Delivered-To: current@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 94FA016A417; Fri, 3 Aug 2007 10:21:29 +0000 (UTC) (envelope-from pjd@garage.freebsd.pl) Received: from mail.garage.freebsd.pl (arm132.internetdsl.tpnet.pl [83.17.198.132]) by mx1.freebsd.org (Postfix) with ESMTP id D4C0C13C45A; Fri, 3 Aug 2007 10:21:28 +0000 (UTC) (envelope-from pjd@garage.freebsd.pl) Received: by mail.garage.freebsd.pl (Postfix, from userid 65534) id A8CA3487FA; Fri, 3 Aug 2007 12:21:27 +0200 (CEST) Received: from localhost (154.81.datacomsa.pl [195.34.81.154]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.garage.freebsd.pl (Postfix) with ESMTP id AFCB9487F3; Fri, 3 Aug 2007 12:21:21 +0200 (CEST) Date: Fri, 3 Aug 2007 12:20:19 +0200 From: Pawel Jakub Dawidek To: Dmitry Morozovsky Message-ID: <20070803102019.GG37984@garage.freebsd.pl> References: <20070802155317.X50347@woozle.rinet.ru> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="YrlhzR9YrZtruaFS" Content-Disposition: inline In-Reply-To: <20070802155317.X50347@woozle.rinet.ru> User-Agent: Mutt/1.4.2.3i X-PGP-Key-URL: http://people.freebsd.org/~pjd/pjd.asc X-OS: FreeBSD 7.0-CURRENT i386 X-Spam-Checker-Version: SpamAssassin 3.0.4 (2005-06-05) on mail.garage.freebsd.pl X-Spam-Level: X-Spam-Status: No, score=-2.6 required=3.0 tests=BAYES_00 autolearn=ham version=3.0.4 Cc: jeff@FreeBSD.org, kib@FreeBSD.org, current@FreeBSD.org, howard0su@gmail.com Subject: Re: contemporary -current panic: locking against myself 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: Fri, 03 Aug 2007 10:21:29 -0000 --YrlhzR9YrZtruaFS Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, Aug 02, 2007 at 03:58:26PM +0400, Dmitry Morozovsky wrote: >=20 > Hi there colleagues, >=20 > FreeBSD/i386 on Athlon X2, HEAD without WITNESS. 4G of RAM. tmpfs used fo= r=20 > 'make release'. >=20 >=20 > panic: lockmgr: locking against myself > cpuid =3D 0 > KDB: enter: panic > [thread pid 19396 tid 100245 ] > Stopped at kdb_enter+0x32: leave >=20 > db> tr =20 > Tracing pid 19396 tid 100245 td 0xce194220 > kdb_enter(c066f664,0,c066dca9,e92799cc,0,...) at kdb_enter+0x32 > panic(c066dca9,e92799dc,c0559cc7,e9279ac0,ca2f7770,...) at panic+0x124 > _lockmgr(ca2f77c8,3002,ca2f77f8,ce194220,c0675afc,...) at _lockmgr+0x401 > vop_stdlock(e9279a5c,ce194220,3002,ca2f7770,e9279a80,...) at vop_stdlock+= 0x40 > VOP_LOCK1_APV(d06417e0,e9279a5c,e9279bc0,0,c8d00330,...) at VOP_LOCK1_APV= +0x46 > _vn_lock(ca2f7770,3002,ce194220,c0675afc,7f3,...) at _vn_lock+0x166 > vget(ca2f7770,1000,ce194220,0,e9279b98,...) at vget+0x114 > vm_object_reference(d1c70348,e9279b30,c063f81d,c0c71000,e381d000,...) at= =20 > vm_object_reference+0x12a > kern_execve(ce194220,e9279c5c,0,28204548,282045d8,e381d000,e381d000,e381d= 015,e381d4dc,e385d000,3fb24,3,20)=20 > at kern_execve+0x31a > execve(ce194220,e9279cfc,c,ce194220,e9279d2c,...) at execve+0x4c > syscall(e9279d38) at syscall+0x345 > Xint0x80_syscall() at Xint0x80_syscall+0x20 > --- syscall (59, FreeBSD ELF32, execve), eip =3D 0x28146a47, esp =3D 0xbf= bfe4cc,=20 > ebp =3D 0xbfbfe4e8 --- >=20 > db> show lockedvnods > Locked vnodes >=20 > 0xca2f7770: tag tmpfs, type VREG > usecount 1, writecount 0, refcount 4 mountedhere 0 > flags () > v_object 0xd1c70348 ref 1 pages 19 > lock type tmpfs: EXCL (count 1) by thread 0xce194220 (pid 19396) wit= h 1=20 > pending > tag VT_TMPFS, tmpfs_node 0xd177f9d4, flags 0x0, links 9 > mode 0555, owner 0, group 0, size 76648, status 0x0 >=20 > It seems there is some locking problem in tmpfs. >=20 > What other info should I provide to help resolve the problem? Here you can find two patches, which may or may not fix your problem. The first one is actually only to improve debug. This patch adds all vnode flags to the output, because I believe you have VI_OWEINACT set, but not printed: http://people.freebsd.org/~pjd/patches/vfs_subr.c.4.patch The problem here is that vm_object_reference() calls vget() without any lock flag and vget() locks vnode exclusively when the VI_OWEINACT flag is set. vget() should probably be fixed too, but jeff@ opinion is that it shouldn't happen in this case, so this may be tmpfs bug. The patch below fixes some locking problems in tmpfs: http://people.freebsd.org/~pjd/patches/tmpfs.patch The problems are: - tmpfs_root() should honour 'flags' argument, and not always lock the vnode exclusively, - tmpfs_lookup() should lock vnode using cnp->cn_lkflags, and not always do it exclusively, - in ".." case when we unlock directory vnode to avoid deadlock, we should relock it using the same type of lock it was locked before and not always relock it exclusively, Note, that this patch wasn't even compiled tested. --=20 Pawel Jakub Dawidek http://www.wheel.pl pjd@FreeBSD.org http://www.FreeBSD.org FreeBSD committer Am I Evil? Yes, I Am! --YrlhzR9YrZtruaFS Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.4 (FreeBSD) iD8DBQFGswFjForvXbEpPzQRAkMnAJ9rXDMYeYkvZBhS2Y+uyZvjS/TEwQCfUujX Qq8uerYmJg3r72Ca9X8j964= =ykhu -----END PGP SIGNATURE----- --YrlhzR9YrZtruaFS--