summaryrefslogtreecommitdiffstats
path: root/sys/ufs
diff options
context:
space:
mode:
authortegge <tegge@FreeBSD.org>2006-09-26 04:17:17 +0000
committertegge <tegge@FreeBSD.org>2006-09-26 04:17:17 +0000
commit431fd40aef7a0cbbc5403ac5789a600591395339 (patch)
tree250fd2d7484ac9440b47b976cfa44dbdb1040bfd /sys/ufs
parentf42473d76b149849661d41c1f44a36dd01096d40 (diff)
downloadFreeBSD-src-431fd40aef7a0cbbc5403ac5789a600591395339.zip
FreeBSD-src-431fd40aef7a0cbbc5403ac5789a600591395339.tar.gz
Increase mnt_noasync once in softdep_mount() to disallow async io,
closing a window where a file system using softupdates could be async for a short while if both MNT_UPDATE and MNT_ASYNC were passed as flags to nmount(). Add MNTK_SOFTDEP flag to ensure that softdep_mount() doesn't increase mnt_noasync multiple times.
Diffstat (limited to 'sys/ufs')
-rw-r--r--sys/ufs/ffs/ffs_softdep.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c
index 6805563..b1a11be 100644
--- a/sys/ufs/ffs/ffs_softdep.c
+++ b/sys/ufs/ffs/ffs_softdep.c
@@ -1426,6 +1426,11 @@ softdep_mount(devvp, mp, fs, cred)
MNT_ILOCK(mp);
mp->mnt_flag &= ~MNT_ASYNC;
mp->mnt_flag |= MNT_SOFTDEP;
+ if ((mp->mnt_kern_flag & MNTK_SOFTDEP) == 0) {
+ mp->mnt_kern_flag = (mp->mnt_kern_flag & ~MNTK_ASYNC) |
+ MNTK_SOFTDEP;
+ mp->mnt_noasync++;
+ }
MNT_IUNLOCK(mp);
ump = VFSTOUFS(mp);
LIST_INIT(&ump->softdep_workitem_pending);
OpenPOWER on IntegriCloud