diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2021-02-28 22:46:21 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2021-03-12 11:31:08 +0000 |
commit | d7e5e374167fe98e998b80691824750f44bb050d (patch) | |
tree | 77288908892a8c0b8003387025211af2f150ef99 /sys/ufs/ffs/ffs_softdep.c | |
parent | fabbc3d879cce5c37df25707107a0fcb64267346 (diff) | |
download | src-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.c | 7 |
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); } /* |