Author: ken
Date: Tue Apr 24 13:52:39 2018
New Revision: 332933
URL: https://svnweb.freebsd.org/changeset/base/332933

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 <andr...@haakh.de>
    Tested by:  Dr. Andreas Haakh <andr...@haakh.de>
    Sponsored by:       Spectra Logic
    ------------------------------------------------------------------------

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

Modified: stable/10/sys/cam/scsi/scsi_sa.c
==============================================================================
--- stable/10/sys/cam/scsi/scsi_sa.c    Tue Apr 24 13:44:19 2018        
(r332932)
+++ stable/10/sys/cam/scsi/scsi_sa.c    Tue Apr 24 13:52:39 2018        
(r332933)
@@ -3453,12 +3453,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);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to