svn commit: r250144 - in stable/9/sys: cam/scsi dev/usb/storage

Alexander Motin mav at FreeBSD.org
Wed May 1 11:10:16 UTC 2013


Author: mav
Date: Wed May  1 11:10:15 2013
New Revision: 250144
URL: http://svnweb.freebsd.org/changeset/base/250144

Log:
  MFC r245647 (by kan):
  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.

Modified:
  stable/9/sys/cam/scsi/scsi_all.c
  stable/9/sys/dev/usb/storage/umass.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/dev/   (props changed)

Modified: stable/9/sys/cam/scsi/scsi_all.c
==============================================================================
--- stable/9/sys/cam/scsi/scsi_all.c	Wed May  1 09:56:09 2013	(r250143)
+++ stable/9/sys/cam/scsi/scsi_all.c	Wed May  1 11:10:15 2013	(r250144)
@@ -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: stable/9/sys/dev/usb/storage/umass.c
==============================================================================
--- stable/9/sys/dev/usb/storage/umass.c	Wed May  1 09:56:09 2013	(r250143)
+++ stable/9/sys/dev/usb/storage/umass.c	Wed May  1 11:10:15 2013	(r250144)
@@ -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-stable-9 mailing list