[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200809152643.GA277165@rowland.harvard.edu>
Date: Sun, 9 Aug 2020 11:26:43 -0400
From: Alan Stern <stern@...land.harvard.edu>
To: Martin Kepplinger <martin.kepplinger@...i.sm>
Cc: James Bottomley <James.Bottomley@...senpartnership.com>,
Bart Van Assche <bvanassche@....org>,
Can Guo <cang@...eaurora.org>, martin.petersen@...cle.com,
linux-scsi@...r.kernel.org, linux-kernel@...r.kernel.org,
kernel@...i.sm
Subject: Re: [PATCH] scsi: sd: add runtime pm to open / release
On Sun, Aug 09, 2020 at 11:20:22AM +0200, Martin Kepplinger wrote:
> Hey Alan, I'm really glad for that, I suspected some of this but I have
> little experience in scsi/block layers, so that is super helpful.
>
> I'd appreciate an opinion on the below workaround that *seems* to work
> now (let's see, I had thought so before :)
>
> Whether or not this helps to find a real solution, let's see. But
> integration of such a flag in the error handling paths is what's
> interesting for now:
>
>
> --- a/drivers/scsi/scsi_error.c
> +++ b/drivers/scsi/scsi_error.c
> @@ -565,6 +565,17 @@ int scsi_check_sense(struct scsi_cmnd *scmd)
> return NEEDS_RETRY;
> }
> }
> + if (scmd->device->expecting_media_change) {
> + if (sshdr.asc == 0x28 && sshdr.ascq == 0x00) {
> + /* clear expecting_media_change in
> + * scsi_noretry_cmd() because we need
> + * to override possible "failfast" overrides
> + * that block readahead can cause.
> + */
> + return NEEDS_RETRY;
This is a somewhat fragile approach. You don't know for certain that
scsi_noretry_cmd will be called. Also, scsi_noretry_cmd can be called
from other places.
It would be better to clear the expecting_media_change flag just before
returning from scsi_decide_disposition. That way its use is localized
to one routine, not spread out between two.
Alan Stern
Powered by blists - more mailing lists