Skip site navigation (1)Skip section navigation (2)
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>