Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Apr 2018 15:34:08 +0000 (UTC)
From:      "Kenneth D. Merry" <ken@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r332647 - stable/11/sys/cam/scsi
Message-ID:  <201804171534.w3HFY8es005324@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ken
Date: Tue Apr 17 15:34:08 2018
New Revision: 332647
URL: https://svnweb.freebsd.org/changeset/base/332647

Log:
  MFC r332458:
    ------------------------------------------------------------------------
    r332458 | ken | 2018-04-12 15:21:18 -0600 (Thu, 12 Apr 2018) | 34 lines
  
    Handle Programmable Early Warning for control commands in sa(4).
  
    When the tape position is inside the Early Warning area, the tape
    drive will return a sense key of NO SENSE, and an ASC/ASCQ of
    0x00,0x02, which means: End-of-partition/medium detected".  If
    this was in response to a control command like WRITE FILEMARKS,
    we correctly translate this as informational status and return
    0 from saerror().
  
    Programmable Early Warning should be handled the same way, but
    we weren't handling it that way.  As a result, if a PEW status
    (sense key of NO SENSE, ASC/ASCQ of 0x00,0x07, "Programmable early
    warning detected") came back in response to a WRITE FILEMARKS,
    we returned an error.
  
    The impact of this was that if an application was writing to a
    sa(4) device, and a PEW area was set (in the Device Configuration
    Extension subpage -- mode page 0x10, subpage 1), and a filemark
    needed to be written on close, we could wind up returning an error
    to the user on close because of a "failure" to write the filemarks.
  
    It actually isn't a failure, but rather just a status report from
    the drive, and shouldn't be treated as a failure.
  
    sys/cam/scsi/scsi_sa.c:
    	For control commands in saerror(), treat asc/ascq 0x00,0x07
    	the same as 0x00,{0-5} -- not an error.  Return 0, since
    	the command actually did succeed.
  
    Reported by:	Dr. Andreas Haakh <andreas@haakh.de>
    Tested by:	Dr. Andreas Haakh <andreas@haakh.de>
    Sponsored by:	Spectra Logic
    ------------------------------------------------------------------------

Modified:
  stable/11/sys/cam/scsi/scsi_sa.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/cam/scsi/scsi_sa.c
==============================================================================
--- stable/11/sys/cam/scsi/scsi_sa.c	Tue Apr 17 15:29:32 2018	(r332646)
+++ stable/11/sys/cam/scsi/scsi_sa.c	Tue Apr 17 15:34:08 2018	(r332647)
@@ -3454,12 +3454,13 @@ saerror(union ccb *ccb, u_int32_t cflgs, u_int32_t sfl
 			break;
 		}
 		/*
-		 * If this was just EOM/EOP, Filemark, Setmark or ILI detected
-		 * on a non read/write command, we assume it's not an error
-		 * and propagate the residule and return.
+		 * If this was just EOM/EOP, Filemark, Setmark, ILI or
+		 * PEW detected on a non read/write command, we assume
+		 * it's not an error and propagate the residual and return.
 		 */
-		if ((aqvalid && asc == 0 && ascq > 0 && ascq <= 5) ||
-		    (aqvalid == 0 && sense_key == SSD_KEY_NO_SENSE)) {
+		if ((aqvalid && asc == 0 && ((ascq > 0 && ascq <= 5)
+		  || (ascq == 0x07)))
+		 || (aqvalid == 0 && sense_key == SSD_KEY_NO_SENSE)) {
 			csio->resid = resid;
 			QFRLS(ccb);
 			return (0);



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