svn commit: r206299 - stable/8/sys/dev/usb/storage
Andrew Thompson
thompsa at FreeBSD.org
Tue Apr 6 23:19:44 UTC 2010
Author: thompsa
Date: Tue Apr 6 23:19:43 2010
New Revision: 206299
URL: http://svn.freebsd.org/changeset/base/206299
Log:
MFC r203146
Rework cam error handling to fix Mitsumi floppy drives.
Submitted by: mav
Modified:
stable/8/sys/dev/usb/storage/umass.c
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
stable/8/sys/dev/xen/xenpci/ (props changed)
Modified: stable/8/sys/dev/usb/storage/umass.c
==============================================================================
--- stable/8/sys/dev/usb/storage/umass.c Tue Apr 6 23:19:11 2010 (r206298)
+++ stable/8/sys/dev/usb/storage/umass.c Tue Apr 6 23:19:43 2010 (r206299)
@@ -2594,11 +2594,19 @@ umass_cam_cb(struct umass_softc *sc, uni
default:
/*
- * the wire protocol failed and will have recovered
- * (hopefully). We return an error to CAM and let CAM retry
- * the command if necessary.
+ * The wire protocol failed and will hopefully have
+ * recovered. We return an error to CAM and let CAM
+ * retry the command if necessary. In case of SCSI IO
+ * commands we ask the CAM layer to check the
+ * condition first. This is a quick hack to make
+ * certain devices work.
*/
- ccb->ccb_h.status = CAM_REQ_CMP_ERR;
+ if (ccb->ccb_h.func_code == XPT_SCSI_IO) {
+ ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR;
+ ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
+ } else {
+ ccb->ccb_h.status = CAM_REQ_CMP_ERR;
+ }
xpt_done(ccb);
break;
}
More information about the svn-src-stable
mailing list