svn commit: r332933 - stable/10/sys/cam/scsi
Kenneth D. Merry
ken at FreeBSD.org
Tue Apr 24 13:52:40 UTC 2018
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 <andreas at haakh.de>
Tested by: Dr. Andreas Haakh <andreas at 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);
More information about the svn-src-stable-10
mailing list