Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Dec 2007 13:43:16 -0300
From:      Alejandro Pulver <alepulver@FreeBSD.org>
To:        Csaba Henk <csaba@beastie.creo.hu>
Cc:        freebsd-hackers@FreeBSD.org
Subject:   Re: Disk sync at shutdown and fusefs filesystems
Message-ID:  <20071212134316.3d65f102@deimos.mars.bsd>
In-Reply-To: <slrnflug57.i6j.csaba-ml@beastie.creo.hu>
References:  <20071211001828.54e1da6b@deimos.mars.bsd> <slrnflug57.i6j.csaba-ml@beastie.creo.hu>

next in thread | previous in thread | raw e-mail | index | archive | help
--Sig_/SuCp=xQMD/i.WNumc.Kkx_9
Content-Type: multipart/mixed; boundary="MP_/iVjWT81uZzZ5Lbiaq4SVXk/"

--MP_/iVjWT81uZzZ5Lbiaq4SVXk/
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

On Wed, 12 Dec 2007 03:00:07 +0100
Csaba Henk <csaba@beastie.creo.hu> wrote:

> [This message has also been posted to gmane.os.freebsd.devel.hackers.]
> On 2007-12-11, Alejandro Pulver <alepulver@FreeBSD.org> wrote:
> > The problem with NTFS-3G (and all other FUSE based drivers maybe) is
> > that it doesn't flush the cache data to the disk at shutdown, but it
> > does when unmounted (and I guess this doesn't happen automatically). I
> > noticed this when files I write before manually unmounting persist, and
> > otherwise sometimes they don't.
>=20
> I just happen to discuss this issue with Szaka (ntfs-3g developer) and
> Miklos Szeredi (FUSE developer). At least, we're discussing something
> which might have a relevance here.
>=20
> They have already discovered issues with system shutdown on Linux, and
> Miklos has implemented a solution for this dubbed as "synchronous
> umount". According to this, the protocol is enhanced with a new message
> called DESTROY. Upon unmounting the fs, the kernel sends a DESTROY to
> the daemon and waits for answer. That is, unmount(2) won't complete
> until the fs says to the kernel "OK, I'm done".
>=20
> This was introduced in the following commit (as seen in my HG mirror):
>=20
>   http://mercurial.creo.hu/repos/fuse-hg/?rev/a5df6fb4a0e6
>=20
> and it's already included in the current sysutils/fusefs-libs port.
>=20
> And it wouldn't be hard to add kernel side support for FreeBSD. There
> are some questions though:
>=20
>  - Do you think it could be actually useful for solving the shutdown
>    issue on FreeBSD?
>=20

Hmm, I don't know much of this, but isn't the Linux problem related to
flushing its own block device cache? In FreeBSD it doesn't exist (i.e.
ublio is only user-space), so I wonder if just unmounting before
shutdown solves the issue. I mean, does the kernel still keep
information after a FUSE filesystem is unmounted?

Please correct me if I'm wrong.

At least the currently discussed trick only works because it waits a few
seconds after unmounting to let it flush the cache (but I think it's a
common fact that filesystems get registered/unregistered with a small
delay, and may not be related to that).

>  - Some "got hung in unmount" issues are to be sorted out (these
>    appeared on Linux, and they might or might not appear on FreeBSD).
>=20

Never seen this, but also never unmounted at shutdown before. I have a
patch for it (see thread). Then we could easily see if it get stalled
at shutdown (or when manually stopping the rc.d script).

>  - Security issue: with synch unmount, any user who can mount (w/ synch
>    unmount), is capable of making the unmount stuck (which is easy to
>    fix when the system is up -- just kill the fs daemon -- but can
>    make the shutdown process hopelessly stuck). So we'd have to
>    decide who/when shall be able to do mounts for which the unmount is=20
>    synchronous. (The current criteria for this on Linux -- ie.,
>    is the fuseblk fs variant being used? -- is N/A to FreeBSD for
>    reasons which are OT here. However, Miklos decided to
>    change this so that sych unmount will be tied to the "allow_other"
>    option, which is tied to root privileges, and does make sense
>    on FreeBSD, too. I'd be happy to hear more suitable criteria.
>=20

This would depend on the previous point.

Please CC me as I'm not (yet) subscribed.

Best Regards,
Ale

--MP_/iVjWT81uZzZ5Lbiaq4SVXk/
Content-Type: text/x-patch; name=fusefs-kmod.diff
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment; filename=fusefs-kmod.diff

? ../fusefs-kmod/fusefs-kmod-0.3.9.p1_3.tbz
Index: ../fusefs-kmod/Makefile
=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
RCS file: /home/pcvs/ports/sysutils/fusefs-kmod/Makefile,v
retrieving revision 1.16
diff -u -r1.16 Makefile
--- ../fusefs-kmod/Makefile	15 Nov 2007 19:46:42 -0000	1.16
+++ ../fusefs-kmod/Makefile	12 Dec 2007 03:12:14 -0000
@@ -7,7 +7,7 @@
=20
 PORTNAME=3D	fusefs
 DISTVERSION=3D	0.3.9-pre1
-PORTREVISION=3D	2
+PORTREVISION=3D	3
 CATEGORIES=3D	sysutils kld
 MASTER_SITES=3D	http://fuse4bsd.creo.hu/downloads/ \
 		http://am-productions.biz/docs/
Index: ../fusefs-kmod/files/fusefs.in
=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
RCS file: /home/pcvs/ports/sysutils/fusefs-kmod/files/fusefs.in,v
retrieving revision 1.4
diff -u -r1.4 fusefs.in
--- ../fusefs-kmod/files/fusefs.in	30 Oct 2007 03:10:09 -0000	1.4
+++ ../fusefs-kmod/files/fusefs.in	12 Dec 2007 03:12:14 -0000
@@ -25,13 +25,29 @@
=20
 fusefs_start()
 {
+	if kldstat | grep -q fuse\\.ko; then
+		echo "${name} is already running."
+		return 0
+	fi
 	echo "Starting ${name}."
 	kldload $kmod
 }
=20
 fusefs_stop()
 {
+	if ! kldstat | grep -q fuse\\.ko; then
+		echo "${name} is not running."
+		return 1
+	fi
 	echo "Stopping ${name}."
+	mount | while read dev d1 mountpoint d2; do
+		case "$dev" in
+		/dev/fuse[0-9]*)
+			echo "fusefs: unmounting ${mountpoint}."
+			umount $mountpoint ; sleep 1
+			;;
+		esac
+	done
 	kldunload $kmod
 }
 load_rc_config $name
Index: ../fusefs-kmod/files/pkg-message.in
=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
RCS file: /home/pcvs/ports/sysutils/fusefs-kmod/files/pkg-message.in,v
retrieving revision 1.1
diff -u -r1.1 pkg-message.in
--- ../fusefs-kmod/files/pkg-message.in	30 Oct 2007 03:10:09 -0000	1.1
+++ ../fusefs-kmod/files/pkg-message.in	12 Dec 2007 03:12:14 -0000
@@ -12,4 +12,8 @@
 /etc/fstab with the "late" parameter. This requires a symlink in /usr/sbin
 named "mount_<fstype>", which is not created by all the fusefs ports.
=20
+Note that the rc.d script will unmount all fuse filesystems when called wi=
th
+"stop", so it can unload the kernel module, and to flush cache in drivers =
like
+NTFS-3G (sysutils/fusefs-ntfs) at shutdown.
+
 =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=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D

--MP_/iVjWT81uZzZ5Lbiaq4SVXk/--

--Sig_/SuCp=xQMD/i.WNumc.Kkx_9
Content-Type: application/pgp-signature; name=signature.asc
Content-Disposition: attachment; filename=signature.asc

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)

iD8DBQFHYA+kiV05EpRcP2ERAlLwAKC+AMawXVk7G76cuEDVYi+VoKajIgCgkN1y
VDLoPk8On2kodPAddSwKY+0=
=IfDM
-----END PGP SIGNATURE-----

--Sig_/SuCp=xQMD/i.WNumc.Kkx_9--



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