Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 27 Jul 2014 20:47:57 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Harald Schmalzbauer <h.schmalzbauer@omnilan.de>
Cc:        FreeBSD Stable <freebsd-stable@freebsd.org>
Subject:   Re: panic/lock on 9.3-RELEASE with nullfs/nfs/zfs combination
Message-ID:  <20140727174757.GN93733@kib.kiev.ua>
In-Reply-To: <53D5105A.6040204@omnilan.de>
References:  <53D12973.3010805@omnilan.de> <20140724165917.GT93733@kib.kiev.ua> <53D1503B.2030200@omnilan.de> <20140724193048.GU93733@kib.kiev.ua> <53D2006C.7090207@omnilan.de> <20140725151448.GY93733@kib.kiev.ua> <53D380B2.2080700@omnilan.de> <20140726114839.GF93733@kib.kiev.ua> <53D5105A.6040204@omnilan.de>

next in thread | previous in thread | raw e-mail | index | archive | help

--RSvKN2On5SRY9c4K
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Sun, Jul 27, 2014 at 04:44:42PM +0200, Harald Schmalzbauer wrote:
>  Bez??glich Konstantin Belousov's Nachricht vom 26.07.2014 13:48
> (localtime):
> I can't emphasize how much I hate my lousy C skills... Got "format '%#x'
> expects type 'unsigned int', but argument 3 has type 'u_long'
> [-Wformat]" from the compiler and found out that I can't read/understand
> any part of your patch; not even the syntax :-(
>=20
> After reading printf(3) I change the 3rd additional line into
> '("ldvp %p fl %#lx dvp %p fl %#lx flags %#x", ldvp, ldvp->v_vflag,'
> ??? A blind man may sometimes hit the mark.
This is because the patch was against HEAD, where I changed type of flags
to not waste space.  It was not merged to stable/9 to keep KBI.

> Here's the panic:
> panic: ldvp 0xfffffe001bafb000 fl 0x1 dvp 0xfffffe01b4e5a9d8 fl 0 flags
> 0x120e144

> vnode vnode 0xfffffe014bc03dc8: 0xfffffe014bc03dc8: tag null, type VDIR
> tag null, type VDIR
> usecount 1, writecount 0, refcount 1 mountedhere 0
> usecount 1, writecount 0, refcount 1 mountedhere 0
> flags (VV_ROOT|VI_ACTIVE)
> flags (VV_ROOT|VI_ACTIVE)
> v_object 0xfffffe014bbf4828 ref 0 pages 0 cleanbuf 0 dirtybuf 0
> v_object 0xfffffe014bbf4828 ref 0 pages 0 cleanbuf 0 dirtybuf 0
> lock type zfs: SHARED (count 1)
> lock type zfs: SHARED (count 1)
> vp=3D0xfffffe014bc03dc8, lowervp=3D0xfffffe001bafb000
> vp=3D0xfffffe014bc03dc8, lowervp=3D0xfffffe001bafb000

So the root vnode for underlying ZFS filesystem somehow managed to get
two different upper vnodes for nullfs mount.  My guess is that the real
problem is due to inconsistent initialization of v_hash for zfs vnodes.
It only get set in zfs_vget(), which causes root vnode to have zero
hash initially.

Please, keep the KASSERT() patch applied, revert the VV_ROOT patch for
nullfs, and apply the following change.  Then retest.

diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c b/=
sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
index 04160c6..33748fe 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
@@ -2075,8 +2075,6 @@ zfs_vget(vfs_t *vfsp, ino_t ino, int flags, vnode_t *=
*vpp)
 		err =3D vn_lock(*vpp, flags);
 	if (err !=3D 0)
 		*vpp =3D NULL;
-	else
-		(*vpp)->v_hash =3D ino;
 	return (err);
 }
=20
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c b/s=
ys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
index ac55996..c8f86b8 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
@@ -1228,9 +1228,10 @@ again:
 		vnode_t *vp =3D ZTOV(zp);
=20
 		err =3D insmntque(vp, zfsvfs->z_vfs);
-		if (err =3D=3D 0)
+		if (err =3D=3D 0) {
+			vp->v_hash =3D obj_num;
 			VOP_UNLOCK(vp, 0);
-		else {
+		} else {
 			zp->z_vnode =3D NULL;
 			zfs_znode_dmu_fini(zp);
 			zfs_znode_free(zp);

--RSvKN2On5SRY9c4K
Content-Type: application/pgp-signature

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iQIcBAEBAgAGBQJT1TtMAAoJEJDCuSvBvK1BnwIP+wYJdIaUQ17ygpyiWCIpdFly
gbSi91GMuQKa+FXwJ3bzJmwo3TELiWnX4NKNHYtaaso1zU5dW+ADh1dzuqX1E/xc
iuQ3EDlmw7QkSCQl2R5EKlanG0Bqh5n0uIvJ/OVI+kkIna4KcW38N/xXGb5A1YjK
eABkhB1pTWSBpI6emQMBJXabRiRInIDCTl/8uxGAucBBgHjSYmRaWbuiWjHt9dPh
aBsmV6qps/mI9M84HxbEGMSYIDp2jZy9SJtAUVqqx1G1aF1taISRAUEc/pTRE1Mz
3ldVZ6DntSsjG4ZjrL/inED8Mcxa+nnn+TnJqigqRLk9PWuIsW87EyUaBVpRjXhk
JSeTDjU4zL0SDTUL+VWHlgC+N8nyiEXK5jz13TCatQi6wcuZHcIyQ7Qlt0viifJ5
Low6wOl3FfoIWKF3mSsjrzSH8BlwJKFrOZlOJV8OQzXFUET/CjeXznorD5ZdGrZI
ABgZ9DoJVY8aE5nhtwOR4UqURkYBjY5AhrJsqX5ywdXmbSYWTmLUrvFpO3nEj623
GqUaKOaKZJ6MvzrK0F3ADfACblhDBsPAxJt9oyyNQiTKlYcotKgugrRik6yVHlOO
5YdOOKi9ng5UWfY7PGSSI41aXgBc8J/w5ADVl2CJsi0w/Nuyo0wJd9vnzMVkpNLw
BbLI7ThP7hqKQohfl70+
=JwIH
-----END PGP SIGNATURE-----

--RSvKN2On5SRY9c4K--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140727174757.GN93733>