]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
scsi: st: Tighten the page format heuristics with MODE SELECT
authorKai Mäkisara <Kai.Makisara@kolumbus.fi>
Tue, 11 Mar 2025 11:25:16 +0000 (13:25 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 4 Jun 2025 12:37:00 +0000 (14:37 +0200)
[ 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>
drivers/scsi/st.c

index 465fe83b49e98581e16af2ed7274ec6d997babdf..47e59b74c09d2e6cded127d01b3e7fb324cb6e71 100644 (file)
@@ -3076,7 +3076,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;