Index: sys/dev/dksubr.c =================================================================== RCS file: /cvsroot/src/sys/dev/dksubr.c,v retrieving revision 1.93 diff -u -p -r1.93 dksubr.c --- sys/dev/dksubr.c 8 Dec 2016 12:22:56 -0000 1.93 +++ sys/dev/dksubr.c 22 Dec 2016 09:39:03 -0000 @@ -447,6 +447,23 @@ dk_done1(struct dk_softc *dksc, struct b rnd_add_uint32(&dksc->sc_rnd_source, bp->b_rawblkno); biodone(bp); + + if (lock) + mutex_enter(&dksc->sc_iolock); + if (dksc->sc_deferred) { + struct buf *tmp = dksc->sc_deferred; + const struct dkdriver *dkd = dksc->sc_dkdev.dk_driver; + dksc->sc_deferred = NULL; + disk_busy(&dksc->sc_dkdev); + mutex_exit(&dksc->sc_iolock); + int error = dkd->d_diskstart(dksc->sc_dev, tmp); + mutex_enter(&dksc->sc_iolock); + if (error) { + dksc->sc_deferred = tmp; + } + } + if (lock) + mutex_exit(&dksc->sc_iolock); } void