aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/usb/storage
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2017-02-25 14:24:29 +0000
committerAlexander Motin <mav@FreeBSD.org>2017-02-25 14:24:29 +0000
commitebaf2c29d762a723658b9e5f873bd6a7d0e1f2a8 (patch)
tree1a07102bc7b5868d04ebb01660b1f649b6ac10f8 /sys/dev/usb/storage
parent65638556348632cdd81d8544f03307f438b01f3b (diff)
Notes
Diffstat (limited to 'sys/dev/usb/storage')
-rw-r--r--sys/dev/usb/storage/cfumass.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/sys/dev/usb/storage/cfumass.c b/sys/dev/usb/storage/cfumass.c
index 8c8287349389..71fd6e549b03 100644
--- a/sys/dev/usb/storage/cfumass.c
+++ b/sys/dev/usb/storage/cfumass.c
@@ -987,19 +987,21 @@ cfumass_done(union ctl_io *io)
return;
}
- switch (io->scsiio.scsi_status) {
- case SCSI_STATUS_OK:
+ if ((io->io_hdr.status & CTL_STATUS_MASK) == CTL_SUCCESS)
sc->sc_current_status = 0;
- break;
- default:
+ else
sc->sc_current_status = 1;
- break;
- }
+
+ /* XXX: How should we report BUSY, RESERVATION CONFLICT, etc? */
+ if ((io->io_hdr.status & CTL_STATUS_MASK) == CTL_SCSI_ERROR &&
+ io->scsiio.scsi_status == SCSI_STATUS_CHECK_COND)
+ ctl_queue_sense(io);
+ else
+ ctl_free_io(io);
CFUMASS_LOCK(sc);
cfumass_transfer_start(sc, CFUMASS_T_STATUS);
CFUMASS_UNLOCK(sc);
- ctl_free_io(io);
refcount_release(&sc->sc_queued);
}