Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Mar 2009 08:04:40 +0100
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        John Baldwin <jhb@FreeBSD.org>
Cc:        Attilio Rao <attilio@FreeBSD.org>, Tim Kientzle <kientzle@FreeBSD.org>, Mark Powell <M.S.Powell@salford.ac.uk>, Anonymous <swell.k@gmail.com>, "freebsd-current@freebsd.org" <freebsd-current@FreeBSD.org>, Peter Schuller <peter.schuller@infidyne.com>
Subject:   Re: repeatable ZFS panic: share->excl
Message-ID:  <20090317070440.GE2012@garage.freebsd.pl>
In-Reply-To: <49BAA103.2060508@FreeBSD.org>
References:  <20090312175345.Y80227@rust.salford.ac.uk> <20090312191333.GA97342@hyperion.scode.org> <49B97617.8010709@freebsd.org> <86r6124f2v.fsf@gmail.com> <3bbf2fe10903122035i20b2767cod2322c39c6f850ee@mail.gmail.com> <29C8FA04-D5B1-49B7-ACF0-4185537367B0@baldwin.cx> <3bbf2fe10903122156u650417f0s5c49b68bdf4ffa07@mail.gmail.com> <49BA9801.5080505@FreeBSD.org> <49BAA103.2060508@FreeBSD.org>

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

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

On Fri, Mar 13, 2009 at 02:08:03PM -0400, John Baldwin wrote:
> John Baldwin wrote:
> >Yes, I think that is the real bug.  Looking at this further I think
> >zfs_get_xattrdir() will return the vnode locked if it has to create a
> >new node via zfs_make_attrdir() but only returns it held and unlocked if
> >it finds an existing one.  So my new patch is to just fix
> >zfs_get_xattrdir() to unlock the vnode if it creates a new one like so:
> >
> >(Sorry, TBird is probably going to butcher all the whitespace):
> >
> >---
> >//depot/user/jhb/lock/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir=
.c
> >+++
> >/Users/jhb/work/p4/lock/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_d=
ir.c=20
> >
> >@@ -940,6 +940,7 @@
> >         /* NB: we already did dmu_tx_wait() if necessary */
> >         goto top;
> >     }
> >+    VOP_UNLOCK(*xvpp, 0);
> >
> >     return (error);
> > }
> >
> >A non-butchered version is at www.FreeBSD.org/~jhb/patches/zfs_ea.patch.
>=20
> So lulf@ reports success with this patch.  Pawel, can you review it?

Yes, it works for me too and looks good. The only thing we need to
change is to check for error beeing 0 before unlocking the vnode.
The zfs_make_xattrdir() function can still return with EIO, so I'd add
something like this:

	if (error =3D=3D 0)
		VOP_UNLOCK(*xvpp, 0);

Thank you John for spending time on tracking this one down.

--=20
Pawel Jakub Dawidek                       http://www.wheel.pl
pjd@FreeBSD.org                           http://www.FreeBSD.org
FreeBSD committer                         Am I Evil? Yes, I Am!

--M38YqGLZlgb6RLPS
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.4 (FreeBSD)

iD8DBQFJv0uHForvXbEpPzQRAhlpAJ4qJTXetJNyhAOtDvdHD7aGUEGh7gCguoRG
uEwHGOxaS6Y1tQVSOEj0fdg=
=LRHI
-----END PGP SIGNATURE-----

--M38YqGLZlgb6RLPS--



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