[PATCH 2/2] scsi: tape: add unexpected rewind handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Handle the unexpected condition where the tape drive reports
that tape is rewinding.

Patch one in this series was designed to handle an unexpected third
party reset condition on the tape device by setting pos_unknown
following a POR Unit Attention. Because we do not have access to
an Amazon VTL application Laurance and I tried to repoduce the
aforementioned POR data corruption problem by using a physical tape
drive with a multi-initiator iSCSI gateway.

We were easily able to issue the third party reset from initiator 1
while initiator 2 had a backup in progress. We saw the tape drive
automatically rewind following the reset, and the st driver on
initiator 2 attempt to write a filemark with MTEOM. However, we
discovered our tape drive (an HP Ultrium 5-SCSI Z64D) never sends a
Unit Attention of any kind. Instead, following the third party
reset, the tape drive continually returned "No Sense, Rewind
operation in progress".

Here are the test results w/out this patch.

<<< Rest by other initiator
st 33:0:0:0: [st0] Error: 2, cmd: a 0 0 28 0 0
st 33:0:0:0: [st0] Sense Key : No Sense [current]
st 33:0:0:0: [st0] Add. Sense: Rewind operation in progress
st 33:0:0:0: [st0] Error on write:
st 33:0:0:0: [st0] Number of r/w requests 35913, dio used in 35913...
st 33:0:0:0: [st0] Async write waits 0, finished 0.
st 33:0:0:0: [st0] Error: 2, cmd: 10 0 0 0 1 0     <<< write filemark
st 33:0:0:0: [st0] Sense Key : No Sense [current]
st 33:0:0:0: [st0] Add. Sense: Rewind operation in progress
st 33:0:0:0: [st0] Error on write filemark.
st 33:0:0:0: [st0] Buffer flushed, 1 EOF(s) written  <<< flush buffer
st 33:0:0:0: [st0] Rewinding tape.
st 33:0:0:0: [st0] Error: 2, cmd: 1 0 0 0 0 0
st 33:0:0:0: [st0] Sense Key : No Sense [current]
st 33:0:0:0: [st0] Add. Sense: Rewind operation in progress

With the patch:

<<< Rest by other initiator
st 32:0:0:0: [st0] Error: 8000002, cmd: a 0 0 28 0 0
st 32:0:0:0: [st0] Sense Key : No Sense [current]
st 32:0:0:0: [st0] Add. Sense: Rewind operation in progress
st 32:0:0:0: [st0] Error on write:
<<< no write filemark or flush buffer >>>
st 32:0:0:0: [st0] Number of r/w requests 1624, dio used in 1624...
st 32:0:0:0: [st0] Rewinding tape.
st 32:0:0:0: [st0] Error: 8000002, cmd: 1 0 0 0 0 0
st 32:0:0:0: [st0] Sense Key : No Sense [current]
st 32:0:0:0: [st0] Add. Sense: Rewind operation in progress

I'm providing this patch because I think it's valuable for testing
purposes and it should be safe. Any time the device unexpectedly
reports "Rewind is in progress", it should be safe to set
pos_unknown in the driver.

Tested-by: Laurence Oberman <loberman@xxxxxxxxxx>
Signed-off-by: John Meneghini <jmeneghi@xxxxxxxxxx>
---
 drivers/scsi/st.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index 338aa8c42968..b641490ed9d1 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -416,6 +416,9 @@ static int st_chk_result(struct scsi_tape *STp, struct st_request * SRpnt)
 		STp->cleaning_req = 1; /* ASC and ASCQ => cleaning requested */
 	if (cmdstatp->have_sense && scode == UNIT_ATTENTION && cmdstatp->sense_hdr.asc == 0x29)
 		STp->pos_unknown = 1; /* ASC => power on / reset */
+	if (cmdstatp->have_sense && cmdstatp->sense_hdr.asc == 0
+			&& cmdstatp->sense_hdr.ascq == 0x1a)
+		STp->pos_unknown = 1; /* ASCQ => rewind in progress */
 
 	STp->pos_unknown |= STp->device->was_reset;
 
-- 
2.39.3




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux