Date: Tue, 07 Dec 2004 12:36:15 +0100 From: Thomas Nystrom <thn@saeab.se> To: Alexander Kabaev <kan@FreeBSD.org> Cc: freebsd-fs@FreeBSD.org Subject: Re: Dead vnode locking against itself Message-ID: <41B595AF.7050602@saeab.se> In-Reply-To: <20041206231347.GA18156@freefall.freebsd.org> References: <41B0C899.C005AE1E@saeab.se> <20041206205628.GA3309@freefall.freebsd.org> <41B4D832.2D886E86@saeab.se> <20041206231347.GA18156@freefall.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Alexander Kabaev wrote: >=20 > Unless I am reading sources wrong, the scenario you describe should not= > happen. vgonel resets the vnode type to VBAD just before releasing vnod= e > locks for the last time and vtryrecycle avoids calling vgonel on vnodes= > with that type: >=20 > if (vp->v_type !=3D VBAD) { > VOP_UNLOCK(vp, 0, td); =20 > vgonel(vp, td); > VI_LOCK(vp); > } else > VOP_UNLOCK(vp, 0, td); >=20 > The vnode data below shows that vnode has a type of VDIR and evidently = its > v_op is set to dead_vnodeops. At the same time, v_tag is "none", which > suggests that vnode has been processed by vclean already, but vgonel ha= d > not yet have a chance to update vnode's type. Just out of curiosity, ca= n you > try your code with VI_UNLOCK(vp);/VI_LOCK(vp); pair removed from the > vgonel function around line 294? This is the only place where vnode int= erlock > is released after vclean completes and before vgonel sets the vnode typ= e. > There is no point in unlocking the interlock just to lock it again > immediately anyway. Ok, I missed that VBAD setting. Then I assume that it is arla that is=20 playing around with nodes after it has released via vgonel(). I have=20 seen other indications of that..... /thn --=20 --------------------------------------------------------------- Svensk Aktuell Elektronik AB Thomas Nystr=F6m Box 10 Phone: +46 8 35 92 85 S-191 21 Sollentuna Fax: +46 8 35 92 86 Sweden Email: thn@saeab.se ---------------------------------------------------------------
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41B595AF.7050602>