Patch "scsi: st: Fix input/output error on empty drive reset" has been added to the 6.6-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    scsi: st: Fix input/output error on empty drive reset

to the 6.6-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     scsi-st-fix-input-output-error-on-empty-drive-reset.patch
and it can be found in the queue-6.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 7f1a8cefacbda526607d14a3adb116b458385d9a
Author: Rafael Rocha <rrochavi@xxxxxxxx>
Date:   Thu Sep 5 12:39:21 2024 -0500

    scsi: st: Fix input/output error on empty drive reset
    
    [ Upstream commit 3d882cca73be830549833517ddccb3ac4668c04e ]
    
    A previous change was introduced to prevent data loss during a power-on
    reset when a tape is present inside the drive. This commit set the
    "pos_unknown" flag to true to avoid operations that could compromise data
    by performing actions from an untracked position. The relevant change is
    commit 9604eea5bd3a ("scsi: st: Add third party poweron reset handling")
    
    As a consequence of this change, a new issue has surfaced: the driver now
    returns an "Input/output error" even for empty drives when the drive, host,
    or bus is reset. This issue stems from the "flush_buffer" function, which
    first checks whether the "pos_unknown" flag is set. If the flag is set, the
    user will encounter an "Input/output error" until the tape position is
    known again. This behavior differs from the previous implementation, where
    empty drives were not affected at system start up time, allowing tape
    software to send commands to the driver to retrieve the drive's status and
    other information.
    
    The current behavior prioritizes the "pos_unknown" flag over the
    "ST_NO_TAPE" status, leading to issues for software that detects drives
    during system startup. This software will receive an "Input/output error"
    until a tape is loaded and its position is known.
    
    To resolve this, the "ST_NO_TAPE" status should take priority when the
    drive is empty, allowing communication with the drive following a power-on
    reset. At the same time, the change should continue to protect data by
    maintaining the "pos_unknown" flag when the drive contains a tape and its
    position is unknown.
    
    Signed-off-by: Rafael Rocha <rrochavi@xxxxxxxx>
    Link: https://lore.kernel.org/r/20240905173921.10944-1-rrochavi@xxxxxxxx
    Fixes: 9604eea5bd3a ("scsi: st: Add third party poweron reset handling")
    Acked-by: Kai Mäkisara <kai.makisara@xxxxxxxxxxx>
    Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index 338aa8c429682..212a402e75358 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -835,6 +835,9 @@ static int flush_buffer(struct scsi_tape *STp, int seek_next)
 	int backspace, result;
 	struct st_partstat *STps;
 
+	if (STp->ready != ST_READY)
+		return 0;
+
 	/*
 	 * If there was a bus reset, block further access
 	 * to this device.
@@ -842,8 +845,6 @@ static int flush_buffer(struct scsi_tape *STp, int seek_next)
 	if (STp->pos_unknown)
 		return (-EIO);
 
-	if (STp->ready != ST_READY)
-		return 0;
 	STps = &(STp->ps[STp->partition]);
 	if (STps->rw == ST_WRITING)	/* Writing */
 		return st_flush_write_buffer(STp);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux