From owner-freebsd-current@FreeBSD.ORG Sat Aug 4 11:48:26 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 1B4AC16A41A; Sat, 4 Aug 2007 11:48:26 +0000 (UTC) (envelope-from marck@rinet.ru) Received: from woozle.rinet.ru (woozle.rinet.ru [195.54.192.68]) by mx1.freebsd.org (Postfix) with ESMTP id BC1F913C46B; Sat, 4 Aug 2007 11:48:25 +0000 (UTC) (envelope-from marck@rinet.ru) Received: from localhost (localhost [127.0.0.1]) by woozle.rinet.ru (8.14.1/8.14.1) with ESMTP id l74BmNmc084940; Sat, 4 Aug 2007 15:48:23 +0400 (MSD) (envelope-from marck@rinet.ru) Date: Sat, 4 Aug 2007 15:48:23 +0400 (MSD) From: Dmitry Morozovsky To: Pawel Jakub Dawidek In-Reply-To: <20070804094047.V8449@woozle.rinet.ru> Message-ID: <20070804154621.R84869@woozle.rinet.ru> References: <20070802155317.X50347@woozle.rinet.ru> <20070803102019.GG37984@garage.freebsd.pl> <20070803164108.C569@woozle.rinet.ru> <20070804094047.V8449@woozle.rinet.ru> X-NCC-RegID: ru.rinet X-OpenPGP-Key-ID: 6B691B03 MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-3.0 (woozle.rinet.ru [0.0.0.0]); Sat, 04 Aug 2007 15:48:24 +0400 (MSD) Cc: 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: Sat, 04 Aug 2007 11:48:26 -0000 On Sat, 4 Aug 2007, Dmitry Morozovsky wrote: DM> DM> PJD> Here you can find two patches, which may or may not fix your problem. DM> DM> PJD> The first one is actually only to improve debug. DM> DM> PJD> DM> DM> PJD> This patch adds all vnode flags to the output, because I believe you DM> DM> PJD> have VI_OWEINACT set, but not printed: DM> DM> PJD> DM> DM> PJD> http://people.freebsd.org/~pjd/patches/vfs_subr.c.4.patch DM> DM> PJD> DM> DM> PJD> The problem here is that vm_object_reference() calls vget() without any DM> DM> PJD> lock flag and vget() locks vnode exclusively when the VI_OWEINACT flag DM> DM> PJD> is set. vget() should probably be fixed too, but jeff@ opinion is that DM> DM> PJD> it shouldn't happen in this case, so this may be tmpfs bug. DM> DM> PJD> DM> DM> PJD> The patch below fixes some locking problems in tmpfs: DM> DM> PJD> DM> DM> PJD> http://people.freebsd.org/~pjd/patches/tmpfs.patch DM> DM> PJD> DM> DM> PJD> The problems are: DM> DM> PJD> - tmpfs_root() should honour 'flags' argument, and not always lock the DM> DM> PJD> vnode exclusively, DM> DM> PJD> - tmpfs_lookup() should lock vnode using cnp->cn_lkflags, and not always DM> DM> PJD> do it exclusively, DM> DM> PJD> - in ".." case when we unlock directory vnode to avoid deadlock, we DM> DM> PJD> should relock it using the same type of lock it was locked before and DM> DM> PJD> not always relock it exclusively, DM> DM> PJD> DM> DM> PJD> Note, that this patch wasn't even compiled tested. DM> DM> DM> DM> Well, it at least compiled and booted on i386. Test release run is in progress DM> DM> now, i'll followup with the results. DM> DM> Good news: DM> DM> It fills 4G of RAM + 2G of swap, bailed out but not paniced. If the error is DM> not fixed, it at least well masked now. Please consider your patch for commit. DM> DM> Thanks! Bad news: after increasing swap to 16G (I had also increase maxswzone to 128M) it panics: panic: lockmgr: locking against myself cpuid = 1 KDB: enter: panic [thread pid 93730 tid 100142 ] Stopped at kdb_enter+0x32: leave db> wh Tracing pid 93730 tid 100142 td 0xc65fc660 kdb_enter(c066f95e,1,c066dfa3,e6d279cc,1,...) at kdb_enter+0x32 panic(c066dfa3,e6d279dc,c0559ca7,e6d27ac0,c848d220,...) at panic+0x124 _lockmgr(c848d278,3002,c848d2a8,c65fc660,c0675df6,...) at _lockmgr+0x401 vop_stdlock(e6d27a5c,c65fc660,3002,c848d220,e6d27a80,...) at vop_stdlock+0x40 VOP_LOCK1_APV(c68a38a0,e6d27a5c,e6d27bc0,1,c6e3b110,...) at VOP_LOCK1_APV+0x46 _vn_lock(c848d220,3002,c65fc660,c0675df6,7f3,...) at _vn_lock+0x166 vget(c848d220,1000,c65fc660,0,e6d27b98,...) at vget+0x114 vm_object_reference(cefd57f8,e6d27b30,c063faad,c0c71000,e381f000,...) at vm_object_reference+0x12a kern_execve(c65fc660,e6d27c5c,0,282053cc,28205480,e381f000,e381f000,e381f065,e381f54e,e385f000,3fab2,9,1f) at kern_execve+0x31a execve(c65fc660,e6d27cfc,c,c65fc660,e6d27d2c,...) at execve+0x4c syscall(e6d27d38) at syscall+0x345 Xint0x80_syscall() at Xint0x80_syscall+0x20 --- syscall (59, FreeBSD ELF32, execve), eip = 0x28146a47, esp = 0xbfbfe76c, ebp = 0xbfbfe788 --- db> show lockedvnods Locked vnodes 0xc848d220: tag tmpfs, type VREG usecount 1, writecount 0, refcount 4 mountedhere 0 flags (VI_OWEINACT) v_object 0xcefd57f8 ref 1 pages 57 lock type tmpfs: EXCL (count 1) by thread 0xc65fc660 (pid 93730) with 1 pending tag VT_TMPFS, tmpfs_node 0xd091d5c8, flags 0x0, links 1 mode 0755, owner 0, group 0, size 664544, status 0x0 db> Sincerely, D.Marck [DM5020, MCK-RIPE, DM3-RIPN] [ FreeBSD committer: marck@FreeBSD.org ] ------------------------------------------------------------------------ *** Dmitry Morozovsky --- D.Marck --- Wild Woozle --- marck@rinet.ru *** ------------------------------------------------------------------------