svn commit: r203146 - head/sys/dev/usb/storage

Andrew Thompson thompsa at FreeBSD.org
Fri Jan 29 02:38:35 UTC 2010


Author: thompsa
Date: Fri Jan 29 02:38:34 2010
New Revision: 203146
URL: http://svn.freebsd.org/changeset/base/203146

Log:
  Rework cam error handling to fix Mitsumi floppy drives.
  
  Submitted by:	mav

Modified:
  head/sys/dev/usb/storage/umass.c

Modified: head/sys/dev/usb/storage/umass.c
==============================================================================
--- head/sys/dev/usb/storage/umass.c	Fri Jan 29 02:35:50 2010	(r203145)
+++ head/sys/dev/usb/storage/umass.c	Fri Jan 29 02:38:34 2010	(r203146)
@@ -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-all mailing list