Date: Fri, 3 Apr 2009 12:44:32 +0300 From: Kostik Belousov <kostikbel@gmail.com> To: Chagin Dmitry <dchagin@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Peter Wemm <peter@freebsd.org> Subject: Re: svn commit: r190655 - head/sys/kern Message-ID: <20090403094432.GQ31897@deviant.kiev.zoral.com.ua> In-Reply-To: <20090403060553.GA20624@dchagin.static.corbina.ru> References: <200904022116.n32LGK81076210@svn.freebsd.org> <20090403060553.GA20624@dchagin.static.corbina.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
--Sre54N+byDQwqJQI Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Apr 03, 2009 at 10:05:53AM +0400, Chagin Dmitry wrote: > On Thu, Apr 02, 2009 at 09:16:20PM +0000, Peter Wemm wrote: > > Author: peter > > Date: Thu Apr 2 21:16:20 2009 > > New Revision: 190655 > > URL: http://svn.freebsd.org/changeset/base/190655 > >=20 > > Log: > > vn_vptocnp() unlocks the name cache and forgets to re-lock it before > > returning in one error case, and mistakenly unlocks it for the > > umount -f case. > >=20 >=20 > vn_vptocnp() consumers expects what in case of error returns > w/o CACHE_RLOCK held. so you need something like: Yeah, I do not quite understand this commit. >=20 > diff --git a/sys/kern/vfs_cache.c b/sys/kern/vfs_cache.c > index ea19e13..b06a6c6 100644 > --- a/sys/kern/vfs_cache.c > +++ b/sys/kern/vfs_cache.c > @@ -971,18 +971,17 @@ vn_vptocnp(struct vnode **vp, char **bp, char *buf,= u_int *buflen) > vdrop(*vp); > VFS_UNLOCK_GIANT(vfslocked); > if (error) { > - CACHE_RLOCK(); > numfullpathfail2++; > return (error); > } Yes, this is reversal of the part of the r190655. > *bp =3D buf + *buflen; > *vp =3D dvp; > - CACHE_RLOCK(); > if ((*vp)->v_iflag & VI_DOOMED) { > /* forced unmount */ > vdrop(*vp); > return (ENOENT); > } > + CACHE_RLOCK(); > vdrop(*vp); > =20 > return (0); There, r190655 should be reversed too, instead of doing what you do. VI_DOOMED should be checked while cache is locked. >=20 >=20 > --=20 > Have fun! > chd --Sre54N+byDQwqJQI Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEARECAAYFAknV2n8ACgkQC3+MBN1Mb4j/uwCeJPnFltpXjO5nwD1Ns2pWohH8 6ecAn2TOIAjWpX3nxGbyBgG3VURjYsJa =g/aR -----END PGP SIGNATURE----- --Sre54N+byDQwqJQI--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090403094432.GQ31897>