Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Sep 2011 04:36:35 +0300
From:      Kostik Belousov <kostikbel@gmail.com>
To:        Kirk McKusick <mckusick@mckusick.com>
Cc:        Garrett Cooper <yanegomi@gmail.com>, freebsd-fs@freebsd.org, Xin LI <delphij@freebsd.org>, bug-followup@freebsd.org
Subject:   Re: PR kern/161016 Need to force sync(2) before umounting UFS1 filesystems?
Message-ID:  <20110929013635.GG1511@deviant.kiev.zoral.com.ua>
In-Reply-To: <201109280019.p8S0JVUW067163@chez.mckusick.com>
References:  <CAGH67wSvpmdmCFKxAsgLD5cGc=WcYpX=dXBkhqkePNxVNjR4=g@mail.gmail.com> <201109280019.p8S0JVUW067163@chez.mckusick.com>

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

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

On Tue, Sep 27, 2011 at 05:19:31PM -0700, Kirk McKusick wrote:
> > Date: Sun, 25 Sep 2011 12:07:18 -0700
> > From: Garrett Cooper <yanegomi@gmail.com>
> > To: lev@freebsd.org
> > Cc: freebsd-fs@freebsd.org, Xin LI <delphij@freebsd.org>, current@freeb=
sd.org
> > Subject: Re: Need to force sync(2) before umounting UFS1 filesystems?
> >=20
> > 2011/9/25 Lev Serebryakov <lev@freebsd.org>:
> > > Hello, Garrett.
> > > You wrote 25 =3DD3=3DC5=3DCE=3DD4=3DD1=3DC2=3DD2=3DD1 2011 =3DC7., 12=
:06:05:
> > >
> > >> =3D9A =3D9A Talking to Xin yesterday, he was convinced that this was=
 a
> > >> filesystem//kern bug. Before I file a PR, I'm wondering if anyone el=
se
> > >> has seen this issue..
> > > =3D9AYes, and I posted message about it in embedded@ (Message-ID
> > > <1175277342.20110821215629@serebryakov.spb.ru>), I've got additional
> > > question from Warner Losh about base (underlying) file system, without
> > > any additional reaction.
> >=20
> > Thanks for the comments Adrian and Lev! I've filed PR 161016 to track
> > the issue, because it might be due to changes in the SU code, md, or a
> > subtle race condition in umount (highly unlikely, but it's been
> > noted).
> > -Garrett
> > _______________________________________________
> > freebsd-fs@freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-fs
> > To unsubscribe, send any mail to "freebsd-fs-unsubscribe@freebsd.org"
>=20
> I have taken responsibility for working on this bug report (PR kern/16101=
6).
>=20
> I propose the following change to correct it:
>=20
> Index: sys/kern/vfs_mount.c
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- sys/kern/vfs_mount.c	(revision 225807)
> +++ sys/kern/vfs_mount.c	(working copy)
> @@ -1227,18 +1227,6 @@
>  		mp->mnt_kern_flag |=3D MNTK_UNMOUNTF;
>  	error =3D 0;
>  	if (mp->mnt_lockref) {
> -		if ((flags & MNT_FORCE) =3D=3D 0) {
> -			mp->mnt_kern_flag &=3D ~(MNTK_UNMOUNT | MNTK_NOINSMNTQ |
> -			    MNTK_UNMOUNTF);
> -			if (mp->mnt_kern_flag & MNTK_MWAIT) {
> -				mp->mnt_kern_flag &=3D ~MNTK_MWAIT;
> -				wakeup(mp);
> -			}
> -			MNT_IUNLOCK(mp);
> -			if (coveredvp)
> -				VOP_UNLOCK(coveredvp, 0);
> -			return (EBUSY);
> -		}
>  		mp->mnt_kern_flag |=3D MNTK_DRAINING;
>  		error =3D msleep(&mp->mnt_lockref, MNT_MTX(mp), PVFS,
>  		    "mount drain", 0);
>=20
> The things to check for are:
>=20
> 1) That it fixes the EBUSY on unmount.
>=20
> 2) That it does not cause unmount to hang.
>=20
> I would appreciate feedback as to whether this fix helps.

I think the item 2) should be tested mostly on the hung NFS server.

I understand what you are doing, you do not want a transient mount point
busy caller to fail the unmount. But my belief is that this is the
intended mode of operation for non-forced unmounts.

As I compare the original bug report and your change, the reason that
UFS gives spurious EBUSY on soft unmounts is that SU code busies mp
around some processing. Is my guess right ? Then, restoring some amount
of sync(2) before the unmount would be useful, please see r222466 for
the most likely reason why the issue appeared.

Might be, the best route would be to add a kludge mnt_flag that request
dounmount() to do a VFS_SYNC() before checking for the busy holder ?


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

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

iEYEARECAAYFAk6Dy6MACgkQC3+MBN1Mb4hhwQCgzuj/4OgfYVYgROYIjridzOs5
wooAnje938vnGjgW9UincSwhn0+Sj7Fq
=4iJ6
-----END PGP SIGNATURE-----

--ssSfcPohcXNs3135--



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