[PATCH 08/25] scsi: fix fast-fail for non-passthrough requests

Bart Van Assche Bart.VanAssche at sandisk.com
Thu Apr 13 13:41:07 PDT 2017


On Thu, 2017-04-06 at 17:39 +0200, Christoph Hellwig wrote:
> Currently error is always 0 for non-passthrough requests when reaching the
> scsi_noretry_cmd check in scsi_io_completion, which effectively disables
> all fastfail logic.  Fix this by having a single call to
> __scsi_error_from_host_byte at the beginning of the function and always
> having a valid error value.
> 
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>  drivers/scsi/scsi_lib.c | 28 +++++++---------------------
>  1 file changed, 7 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
> index 11972d1075f1..89b4d9e69866 100644
> --- a/drivers/scsi/scsi_lib.c
> +++ b/drivers/scsi/scsi_lib.c
> @@ -779,21 +779,17 @@ void scsi_io_completion(struct scsi_cmnd *cmd, unsigned int good_bytes)
>  		sense_valid = scsi_command_normalize_sense(cmd, &sshdr);
>  		if (sense_valid)
>  			sense_deferred = scsi_sense_is_deferred(&sshdr);
> +
> +		if (!sense_deferred)
> +			error = __scsi_error_from_host_byte(cmd, result);
>  	}

Hello Christoph,

Sorry but this doesn't look correct to me. Further down a "error =
__scsi_error_from_host_byte(cmd, result)" statement is removed that does not
depend on "if (!sense_deferred)" so I think that assignment should happen
independent of the value of "sense_deferred". Additionally, how can it make
sense to call __scsi_error_from_host_byte() only if sense_deferred == false?
As you know the SCSI command result is generated by the LLD so I don't think
that it depends on whether or not the sense data has been deferred.

Bart.


More information about the Linux-nvme mailing list