Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 Dec 2014 10:30:13 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r276408 - in stable/10/sys: fs/msdosfs kern
Message-ID:  <201412301030.sBUAUDJS039785@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Tue Dec 30 10:30:12 2014
New Revision: 276408
URL: https://svnweb.freebsd.org/changeset/base/276408

Log:
  MFC r275638:
  Do not call VFS_SYNC() before VFS_UNMOUNT() for forced unmount.

Modified:
  stable/10/sys/fs/msdosfs/msdosfs_vfsops.c
  stable/10/sys/kern/vfs_mount.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/sys/fs/msdosfs/msdosfs_vfsops.c
==============================================================================
--- stable/10/sys/fs/msdosfs/msdosfs_vfsops.c	Tue Dec 30 09:20:29 2014	(r276407)
+++ stable/10/sys/fs/msdosfs/msdosfs_vfsops.c	Tue Dec 30 10:30:12 2014	(r276408)
@@ -797,11 +797,15 @@ msdosfs_unmount(struct mount *mp, int mn
 	int error, flags;
 
 	flags = 0;
-	if (mntflags & MNT_FORCE)
+	error = msdosfs_sync(mp, MNT_WAIT);
+	if ((mntflags & MNT_FORCE) != 0) {
 		flags |= FORCECLOSE;
+	} else if (error != 0) {
+		return (error);
+	}
 	error = vflush(mp, 0, flags, curthread);
-	if (error && error != ENXIO)
-		return error;
+	if (error != 0 && error != ENXIO)
+		return (error);
 	pmp = VFSTOMSDOSFS(mp);
 	if ((pmp->pm_flags & MSDOSFSMNT_RONLY) == 0) {
 		error = markvoldirty(pmp, 0);

Modified: stable/10/sys/kern/vfs_mount.c
==============================================================================
--- stable/10/sys/kern/vfs_mount.c	Tue Dec 30 09:20:29 2014	(r276407)
+++ stable/10/sys/kern/vfs_mount.c	Tue Dec 30 10:30:12 2014	(r276408)
@@ -1305,8 +1305,8 @@ dounmount(mp, flags, td)
 		}
 		vput(fsrootvp);
 	}
-	if (((mp->mnt_flag & MNT_RDONLY) ||
-	     (error = VFS_SYNC(mp, MNT_WAIT)) == 0) || (flags & MNT_FORCE) != 0)
+	if ((mp->mnt_flag & MNT_RDONLY) != 0 || (flags & MNT_FORCE) != 0 ||
+	    (error = VFS_SYNC(mp, MNT_WAIT)) == 0)
 		error = VFS_UNMOUNT(mp, flags);
 	vn_finished_write(mp);
 	/*



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