Index: fwdev.c =================================================================== RCS file: /cvsroot/src/sys/dev/ieee1394/fwdev.c,v retrieving revision 1.23 diff -u -p -r1.23 fwdev.c --- fwdev.c 16 Aug 2010 06:05:07 -0000 1.23 +++ fwdev.c 22 Aug 2010 21:56:50 -0000 @@ -803,12 +803,18 @@ fw_read_async(struct fw_drv1 *d, struct int err = 0; mutex_enter(&d->fc->fc_mtx); - while ((xfer = STAILQ_FIRST(&d->rq)) == NULL && err == 0) - err = tsleep(&d->rq, FWPRI, "fwra", 0); - if (err != 0) { - mutex_exit(&d->fc->fc_mtx); - return err; + for (;;) { + xfer = STAILQ_FIRST(&d->rq); + if (xfer == NULL && err == 0) { + mutex_exit(&d->fc->fc_mtx); + err = tsleep(&d->rq, FWPRI, "fwra", 0); + if (err != 0) + return err; + mutex_enter(&d->fc->fc_mtx); + continue; + } + break; } STAILQ_REMOVE_HEAD(&d->rq, link);