Index: sys/dev/scsipi/scsipi_base.c =================================================================== RCS file: /cvsroot/src/sys/dev/scsipi/scsipi_base.c,v retrieving revision 1.174 diff -u -p -r1.174 scsipi_base.c --- sys/dev/scsipi/scsipi_base.c 18 Dec 2016 15:32:36 -0000 1.174 +++ sys/dev/scsipi/scsipi_base.c 19 Dec 2016 21:14:08 -0000 @@ -476,8 +476,9 @@ scsipi_get_xs(struct scsipi_periph *peri KASSERT(lock); SC_DEBUG(periph, SCSIPI_DB3, ("sleeping\n")); periph->periph_flags |= PERIPH_WAITING; - cv_wait(periph_cv_periph(periph), - chan_mtx(periph->periph_channel)); + while (periph->periph_flags & PERIPH_WAITING) + cv_wait(periph_cv_periph(periph), + chan_mtx(periph->periph_channel)); } if (lock) mutex_exit(chan_mtx(periph->periph_channel)); @@ -682,8 +683,10 @@ scsipi_periph_thaw_locked(struct scsipi_ } #endif if (periph->periph_qfreeze == 0 && - (periph->periph_flags & PERIPH_WAITING) != 0) + (periph->periph_flags & PERIPH_WAITING) != 0) { + periph->periph_flags &= ~PERIPH_WAITING; cv_broadcast(periph_cv_periph(periph)); + } } void