aboutsummaryrefslogtreecommitdiff
path: root/sys/ufs/ffs/ffs_softdep.c
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2021-02-28 22:46:21 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2021-03-12 11:31:08 +0000
commitd7e5e374167fe98e998b80691824750f44bb050d (patch)
tree77288908892a8c0b8003387025211af2f150ef99 /sys/ufs/ffs/ffs_softdep.c
parentfabbc3d879cce5c37df25707107a0fcb64267346 (diff)
downloadsrc-d7e5e374167fe98e998b80691824750f44bb050d.tar.gz
src-d7e5e374167fe98e998b80691824750f44bb050d.zip
softdep_unmount: handle spurious wakeups
Reviewed by: mckusick Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D29178
Diffstat (limited to 'sys/ufs/ffs/ffs_softdep.c')
-rw-r--r--sys/ufs/ffs/ffs_softdep.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/ufs/ffs/ffs_softdep.c b/sys/ufs/ffs/ffs_softdep.c
index 4e20652973b4..cb0be9d21529 100644
--- a/sys/ufs/ffs/ffs_softdep.c
+++ b/sys/ufs/ffs/ffs_softdep.c
@@ -2805,10 +2805,13 @@ softdep_unmount(mp)
ACQUIRE_LOCK(ump);
ump->softdep_flags |= FLUSH_EXIT;
wakeup(&ump->softdep_flushtd);
- msleep(&ump->softdep_flags, LOCK_PTR(ump), PVM | PDROP,
- "sdwait", 0);
+ while ((ump->softdep_flags & FLUSH_EXIT) != 0) {
+ msleep(&ump->softdep_flags, LOCK_PTR(ump), PVM,
+ "sdwait", 0);
+ }
KASSERT((ump->softdep_flags & FLUSH_EXIT) == 0,
("Thread shutdown failed"));
+ FREE_LOCK(ump);
}
/*