Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 29 Jan 2010 02:38:34 +0000 (UTC)
From:      Andrew Thompson <thompsa@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r203146 - head/sys/dev/usb/storage
Message-ID:  <201001290238.o0T2cYwB026926@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001290238.o0T2cYwB026926>