Bug 215447 - sr_mod scsi_mode_sense() failure -> "scsi-1 drive"
Summary: sr_mod scsi_mode_sense() failure -> "scsi-1 drive"
Status: NEW
Alias: None
Product: SCSI Drivers
Classification: Unclassified
Component: Other (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: scsi_drivers-other
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2022-01-03 18:00 UTC by Chris Horler
Modified: 2022-06-30 17:19 UTC (History)
0 users

See Also:
Kernel Version: 5.15.6
Subsystem:
Regression: No
Bisected commit-id:


Attachments
SUSE Tumbleweed default kernel with CONFIG_FUSION_LOGGING (debug_level 0x488) (173.32 KB, text/plain)
2022-01-03 18:00 UTC, Chris Horler
Details
SUSE Tumbleweed kernel with fix (172.69 KB, text/plain)
2022-01-03 18:03 UTC, Chris Horler
Details
my understanding of a typical scsi messages / error codes from the logs (3.71 KB, text/plain)
2022-01-03 18:04 UTC, Chris Horler
Details
add use_10_for_ms default to sr.c (423 bytes, patch)
2022-01-03 18:05 UTC, Chris Horler
Details | Diff

Description Chris Horler 2022-01-03 18:00:39 UTC
Created attachment 300216 [details]
SUSE Tumbleweed default kernel with CONFIG_FUSION_LOGGING (debug_level 0x488)

scsi_lib.c: scsi_mode_sense() has defaults assuming MODE_SENSE_10, fallback to MODE_SENSE if that fails.

sr.c: doesn't set sdev->use_10_for_ms.  In my case this causes scsi_mode_sense() to fail and "scsi-1 drive" fallback to be selected.

I tried setting use_10_for_ms in the sr_probe() function, seems to work for code page 0x2A, as requested by sr.c.

I'm unsure where the request for code page 0x19 originates / if failure is acceptable or if it indicates another issue.

4 attachments
Comment 1 Chris Horler 2022-01-03 18:03:06 UTC
Created attachment 300217 [details]
SUSE Tumbleweed kernel with fix

notable by omission of messages (only error conditions are logged by mptscsih)
Comment 2 Chris Horler 2022-01-03 18:04:25 UTC
Created attachment 300218 [details]
my understanding of a typical scsi messages / error codes from the logs
Comment 3 Chris Horler 2022-01-03 18:05:40 UTC
Created attachment 300219 [details]
add use_10_for_ms default to sr.c
Comment 4 Chris Horler 2022-01-15 11:42:45 UTC
self-ping my list-email
Comment 5 Chris Horler 2022-01-15 12:17:01 UTC
Is anyone able to comment on the sr_mod / cdrom / mptsas issue I'm
experiencing (see details in bug)?
I fixed my issue with a one line patch, but I'd like to know if it's
correct and what I should do to have it integrated upstream.

Thanks, Chris

On Sat, 15 Jan 2022 at 11:42, <bugzilla-daemon@bugzilla.kernel.org> wrote:
>
> https://bugzilla.kernel.org/show_bug.cgi?id=215447
>
> --- Comment #4 from Chris Horler (cshorler@googlemail.com) ---
> self-ping my list-email
>
> --
> You may reply to this email to add a comment.
>
> You are receiving this mail because:
> You are watching the assignee of the bug.
Comment 6 Martin K. Petersen 2022-01-15 13:08:54 UTC
Christopher,

> Is anyone able to comment on the sr_mod / cdrom / mptsas issue I'm
> experiencing (see details in bug)?  I fixed my issue with a one line
> patch, but I'd like to know if it's correct and what I should do to
> have it integrated upstream.

My concern is that switching to MODE SENSE(10) by default could break
things for other devices.

There are compelling arguments that we should use MODE SENSE(10). Most
ROM devices appear to favor it. The specs allow both but MMC3 (2001)
mentions MODE SENSE(10) as "shall implement" although it doesn't go as
far as marking it as mandatory in the SCSI command table.

In the current code we fall back to the MODE SENSE(6) command if a MODE
SENSE(10) fails. So if we change the default, unless a device hangs when
we send the 10-byte command, we should be OK.

Another option is to allow a fallback to the 10-byte command if the
6-byte command fails. We currently don't do that because MODE SENSE(6)
was required for so many years. This way we could accommodate devices
such as yours without the risk of changing the default.

The good news is that the "consumer" transports (ATA, FireWire, USB) all
use MODE SENSE(10) by default. So we are really only talking about
changing things for SPI-attached devices which typically are
well-behaved. So my hunch is that switching the default is probably OK,
although I would like the 6/10-byte fallback mechanism to work in both
directions as well.
Comment 7 Chris Horler 2022-01-15 14:04:33 UTC
is it risky to implement the fallback mechanism in both directions? is there a chance of forever retry? (fail 6, fail 10, fail 6, fail 10...)

scsi_lib.c:scsi_mode_sense(): ...

        if (!scsi_status_is_good(result) &&
            driver_byte(result) == DRIVER_SENSE) {
                if (scsi_sense_valid(sshdr)) {
                        if ((sshdr->sense_key == ILLEGAL_REQUEST) &&
                            (sshdr->asc == 0x20) && (sshdr->ascq == 0)) {
                                /* 
                                 * Invalid command operation code
                                 */
                                sdev->use_10_for_ms = !sdev->use_10_for_ms;
                                goto retry;
                        }
                }
        }

I guess I could increase the default retry_count at initialisation and also decrementing it here.
Comment 8 Martin K. Petersen 2022-01-19 04:02:28 UTC
> is it risky to implement the fallback mechanism in both directions? is
> there a chance of forever retry? (fail 6, fail 10, fail 6, fail 10...)

Just a heads-up that I am still working on a reasonable way to go about
this. It is not entirely trivial to perform the transition from MODE
SENSE(6) to (10) given how the SCSI disk driver works.
Comment 9 Chris Horler 2022-01-19 21:20:46 UTC
okay, thanks for the update!
Comment 10 Chris Horler 2022-06-30 17:19:15 UTC
any update on this?

Note You need to log in before you can comment on or make changes to this bug.