diff options
author | tegge <tegge@FreeBSD.org> | 2006-09-26 04:17:17 +0000 |
---|---|---|
committer | tegge <tegge@FreeBSD.org> | 2006-09-26 04:17:17 +0000 |
commit | 431fd40aef7a0cbbc5403ac5789a600591395339 (patch) | |
tree | 250fd2d7484ac9440b47b976cfa44dbdb1040bfd /sys/ufs | |
parent | f42473d76b149849661d41c1f44a36dd01096d40 (diff) | |
download | FreeBSD-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.c | 5 |
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); |