Date: Fri, 3 Apr 2009 10:05:53 +0400 From: Chagin Dmitry <dchagin@freebsd.org> To: Peter Wemm <peter@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r190655 - head/sys/kern Message-ID: <20090403060553.GA20624@dchagin.static.corbina.ru> In-Reply-To: <200904022116.n32LGK81076210@svn.freebsd.org> References: <200904022116.n32LGK81076210@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--dDRMvlgZJXvWKvBx Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable 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 vn_vptocnp() consumers expects what in case of error returns w/o CACHE_RLOCK held. so you need something like: 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); } *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); --=20 Have fun! chd --dDRMvlgZJXvWKvBx Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.10 (FreeBSD) iEYEARECAAYFAknVp0EACgkQ0t2Tb3OO/O1I3ACfZNKJ+Ofv3xiiHZYggkO0zsbz QmsAnjdOvbJ7eaMKK3b9vkrngmdU5y3e =BWKj -----END PGP SIGNATURE----- --dDRMvlgZJXvWKvBx--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090403060553.GA20624>