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-all mailing list