aboutsummaryrefslogtreecommitdiff
path: root/sys/fs/msdosfs
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2020-11-20 12:31:02 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2020-11-20 12:31:02 +0000
commit1b3cb4dc0473a34cfbf41a2c74cdc0c8244fd6c9 (patch)
treedaa501335b66f8bf04f1cdd44a24ede319092559 /sys/fs/msdosfs
parentc17b2a79bd0fdbacd65ca03c5c82756baeff0d8f (diff)
downloadsrc-1b3cb4dc0473a34cfbf41a2c74cdc0c8244fd6c9.tar.gz
src-1b3cb4dc0473a34cfbf41a2c74cdc0c8244fd6c9.zip
msdosfs: Add trivial support for suspension.
Tested by: pho (previous version) Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D27269
Notes
Notes: svn path=/head/; revision=367890
Diffstat (limited to 'sys/fs/msdosfs')
-rw-r--r--sys/fs/msdosfs/msdosfs_vfsops.c6
-rw-r--r--sys/fs/msdosfs/msdosfs_vnops.c4
2 files changed, 8 insertions, 2 deletions
diff --git a/sys/fs/msdosfs/msdosfs_vfsops.c b/sys/fs/msdosfs/msdosfs_vfsops.c
index 2252831003a2..da207c612257 100644
--- a/sys/fs/msdosfs/msdosfs_vfsops.c
+++ b/sys/fs/msdosfs/msdosfs_vfsops.c
@@ -950,6 +950,12 @@ loop:
error = msdosfs_fsiflush(pmp, waitfor);
if (error != 0)
allerror = error;
+
+ if (allerror == 0 && waitfor == MNT_SUSPEND) {
+ MNT_ILOCK(mp);
+ mp->mnt_kern_flag |= MNTK_SUSPEND2 | MNTK_SUSPENDED;
+ MNT_IUNLOCK(mp);
+ }
return (allerror);
}
diff --git a/sys/fs/msdosfs/msdosfs_vnops.c b/sys/fs/msdosfs/msdosfs_vnops.c
index 11d26386f645..857eefb384d9 100644
--- a/sys/fs/msdosfs/msdosfs_vnops.c
+++ b/sys/fs/msdosfs/msdosfs_vnops.c
@@ -848,7 +848,7 @@ msdosfs_fsync(struct vop_fsync_args *ap)
* Non-critical metadata for associated directory entries only
* gets synced accidentally, as in most file systems.
*/
- if (ap->a_waitfor == MNT_WAIT) {
+ if (ap->a_waitfor != MNT_NOWAIT) {
devvp = VTODE(ap->a_vp)->de_pmp->pm_devvp;
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
allerror = VOP_FSYNC(devvp, MNT_WAIT, ap->a_td);
@@ -856,7 +856,7 @@ msdosfs_fsync(struct vop_fsync_args *ap)
} else
allerror = 0;
- error = deupdat(VTODE(ap->a_vp), ap->a_waitfor == MNT_WAIT);
+ error = deupdat(VTODE(ap->a_vp), ap->a_waitfor != MNT_NOWAIT);
if (allerror == 0)
allerror = error;
return (allerror);