diff options
author | kib <kib@FreeBSD.org> | 2014-12-30 10:30:12 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2014-12-30 10:30:12 +0000 |
commit | 8630086ac2460da5edb45eecd6eb3c6bc44dc31f (patch) | |
tree | 8dbb958bea8dcb09881361111bd3973d47c06c0a | |
parent | 9a7db864f78c4821164e142b15574dd789e438fc (diff) | |
download | FreeBSD-src-8630086ac2460da5edb45eecd6eb3c6bc44dc31f.zip FreeBSD-src-8630086ac2460da5edb45eecd6eb3c6bc44dc31f.tar.gz |
MFC r275638:
Do not call VFS_SYNC() before VFS_UNMOUNT() for forced unmount.
-rw-r--r-- | sys/fs/msdosfs/msdosfs_vfsops.c | 10 | ||||
-rw-r--r-- | sys/kern/vfs_mount.c | 4 |
2 files changed, 9 insertions, 5 deletions
diff --git a/sys/fs/msdosfs/msdosfs_vfsops.c b/sys/fs/msdosfs/msdosfs_vfsops.c index 213dd00..d14cdef 100644 --- a/sys/fs/msdosfs/msdosfs_vfsops.c +++ b/sys/fs/msdosfs/msdosfs_vfsops.c @@ -797,11 +797,15 @@ msdosfs_unmount(struct mount *mp, int mntflags) 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); diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index c407699..b2b4969 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -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); /* |