> On 5. Sep 2024, at 20.39, Rafael Rocha <vidurri@xxxxxxxxx> wrote: > > A previous change was introduced to prevent data loss during a power-on reset > when a tape is present inside the drive. This change set the "pos_unknown" flag > to true to avoid operations that could compromise data by performing actions > from an untracked position. The relevant commit is: > > Commit: 9604eea5bd3ae1fa3c098294f4fc29ad687141ea > Subject: scsi: st: Add third-party power-on reset handling > The pos_unknown flag was introduced to prevent writing and reading from an unknown position (usually when the drive rewinds the tape when the device is reset). This commit added code to catch a case which the midlevel did not catch. > 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> > The patch changes the semantics of flush_buffer() slightly. Obviously, nothing should be flushed if position is unknown, but the return code changes when the drive is not ready. This changes the path the code takes after reset if the drive is not ready. I looked at the code and this should not cause problems. So: Acked-by: Kai Mäkisara <kai.makisara@xxxxxxxxxxx <mailto:kai.makisara@xxxxxxxxxxx>> As an sdded note: when looking at the code, another possibility might be to not set pos_unknown if (STp->ready != ST_READY), But if your simple change is enough, it is wise not to make more complex changes. Thanks, Kai