svn commit: r245647 - in head/sys: cam/scsi dev/usb/storage

Alexander Kabaev kan at FreeBSD.org
Sat Jan 19 03:19:40 UTC 2013


Author: kan
Date: Sat Jan 19 03:19:39 2013
New Revision: 245647
URL: http://svnweb.freebsd.org/changeset/base/245647

Log:
  Do not pretend to have autosense data when no such data is available.
  
  Make umass return an error code if SCSI sense retrieval request
  has failed. Make sure scsi_error_action honors SF_NO_RETRY and
  SF_NO_RECOVERY in all cases, even if it cannot parse sense bytes.
  
  Reviewed by: hselasky (umass), scottl (cam)

Modified:
  head/sys/cam/scsi/scsi_all.c
  head/sys/dev/usb/storage/umass.c

Modified: head/sys/cam/scsi/scsi_all.c
==============================================================================
--- head/sys/cam/scsi/scsi_all.c	Sat Jan 19 03:13:04 2013	(r245646)
+++ head/sys/cam/scsi/scsi_all.c	Sat Jan 19 03:19:39 2013	(r245647)
@@ -3071,16 +3071,15 @@ scsi_error_action(struct ccb_scsiio *csi
 					  SSQ_PRINT_SENSE;
 			}
 		}
-		if ((action & SS_MASK) >= SS_START &&
-		    (sense_flags & SF_NO_RECOVERY)) {
-			action &= ~SS_MASK;
-			action |= SS_FAIL;
-		} else if ((action & SS_MASK) == SS_RETRY &&
-		    (sense_flags & SF_NO_RETRY)) {
-			action &= ~SS_MASK;
-			action |= SS_FAIL;
-		}
-
+	}
+	if ((action & SS_MASK) >= SS_START &&
+	    (sense_flags & SF_NO_RECOVERY)) {
+		action &= ~SS_MASK;
+		action |= SS_FAIL;
+	} else if ((action & SS_MASK) == SS_RETRY &&
+	    (sense_flags & SF_NO_RETRY)) {
+		action &= ~SS_MASK;
+		action |= SS_FAIL;
 	}
 	if ((sense_flags & SF_PRINT_ALWAYS) != 0)
 		action |= SSQ_PRINT_SENSE;

Modified: head/sys/dev/usb/storage/umass.c
==============================================================================
--- head/sys/dev/usb/storage/umass.c	Sat Jan 19 03:13:04 2013	(r245646)
+++ head/sys/dev/usb/storage/umass.c	Sat Jan 19 03:19:39 2013	(r245647)
@@ -2602,9 +2602,13 @@ umass_cam_sense_cb(struct umass_softc *s
 			}
 		} else {
 			xpt_freeze_devq(ccb->ccb_h.path, 1);
-			ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR
-			    | CAM_AUTOSNS_VALID | CAM_DEV_QFRZN;
-			ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
+			if (key >= 0) {
+				ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR
+				    | CAM_AUTOSNS_VALID | CAM_DEV_QFRZN;
+				ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
+			} else
+				ccb->ccb_h.status = CAM_AUTOSENSE_FAIL
+				    | CAM_DEV_QFRZN;
 		}
 		xpt_done(ccb);
 		break;


More information about the svn-src-head mailing list