diff options
author | mckusick <mckusick@FreeBSD.org> | 2011-10-11 18:46:41 +0000 |
---|---|---|
committer | mckusick <mckusick@FreeBSD.org> | 2011-10-11 18:46:41 +0000 |
commit | b6c294da1b26f52993b47e80e6d245b2a0cb1dad (patch) | |
tree | 7e7a70e391ea0b6972624ec069ee2f8f1331fdef /sys/kern/vfs_mount.c | |
parent | 4b0faaa8bc1c6d215324ddb1bfcd155d85200b38 (diff) | |
download | FreeBSD-src-b6c294da1b26f52993b47e80e6d245b2a0cb1dad.zip FreeBSD-src-b6c294da1b26f52993b47e80e6d245b2a0cb1dad.tar.gz |
When unmounting a filesystem always wait for the vfs_busy lock to clear
so that if no vnodes in the filesystem are actively in use the unmount
will succeed rather than failing with EBUSY.
Reported by: Garrett Cooper
Reviewed by: Attilio Rao and Kostik Belousov
Tested by: Garrett Cooper
PR: kern/161016
MFC after: 3 weeks
Diffstat (limited to 'sys/kern/vfs_mount.c')
-rw-r--r-- | sys/kern/vfs_mount.c | 12 |
1 files changed, 0 insertions, 12 deletions
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c index d106c76..e8b89e5 100644 --- a/sys/kern/vfs_mount.c +++ b/sys/kern/vfs_mount.c @@ -1227,18 +1227,6 @@ dounmount(mp, flags, td) mp->mnt_kern_flag |= MNTK_UNMOUNTF; error = 0; if (mp->mnt_lockref) { - if ((flags & MNT_FORCE) == 0) { - mp->mnt_kern_flag &= ~(MNTK_UNMOUNT | MNTK_NOINSMNTQ | - MNTK_UNMOUNTF); - if (mp->mnt_kern_flag & MNTK_MWAIT) { - mp->mnt_kern_flag &= ~MNTK_MWAIT; - wakeup(mp); - } - MNT_IUNLOCK(mp); - if (coveredvp) - VOP_UNLOCK(coveredvp, 0); - return (EBUSY); - } mp->mnt_kern_flag |= MNTK_DRAINING; error = msleep(&mp->mnt_lockref, MNT_MTX(mp), PVFS, "mount drain", 0); |