summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Mäkisara <Kai.Makisara@kolumbus.fi>2025-03-11 13:25:16 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-05-29 11:02:15 +0200
commitc6d366f8d24ffb94f4e5a88e4ad1edfed8f7ff63 (patch)
tree4027fc106b11092cf9d3eaf34248063d915c1ccf
parent853a4e7439ef1e2fea72e7eaa31ef9d11bf7e138 (diff)
scsi: st: Tighten the page format heuristics with MODE SELECT
[ Upstream commit 8db816c6f176321e42254badd5c1a8df8bfcfdb4 ] In the days when SCSI-2 was emerging, some drives did claim SCSI-2 but did not correctly implement it. The st driver first tries MODE SELECT with the page format bit set to set the block descriptor. If not successful, the non-page format is tried. The test only tests the sense code and this triggers also from illegal parameter in the parameter list. The test is limited to "old" devices and made more strict to remove false alarms. Signed-off-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi> Link: https://lore.kernel.org/r/20250311112516.5548-4-Kai.Makisara@kolumbus.fi Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r--drivers/scsi/st.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c
index a17441635ff3..1c0951168f64 100644
--- a/drivers/scsi/st.c
+++ b/drivers/scsi/st.c
@@ -3081,7 +3081,9 @@ static int st_int_ioctl(struct scsi_tape *STp, unsigned int cmd_in, unsigned lon
cmd_in == MTSETDRVBUFFER ||
cmd_in == SET_DENS_AND_BLK) {
if (cmdstatp->sense_hdr.sense_key == ILLEGAL_REQUEST &&
- !(STp->use_pf & PF_TESTED)) {
+ cmdstatp->sense_hdr.asc == 0x24 &&
+ (STp->device)->scsi_level <= SCSI_2 &&
+ !(STp->use_pf & PF_TESTED)) {
/* Try the other possible state of Page Format if not
already tried */
STp->use_pf = (STp->use_pf ^ USE_PF) | PF_TESTED;