From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bart.VanAssche@sandisk.com (Bart Van Assche) Date: Thu, 13 Apr 2017 20:41:07 +0000 Subject: [PATCH 08/25] scsi: fix fast-fail for non-passthrough requests In-Reply-To: <20170406153944.10058-9-hch@lst.de> References: <20170406153944.10058-1-hch@lst.de> <20170406153944.10058-9-hch@lst.de> Message-ID: <1492116064.24345.12.camel@sandisk.com> On Thu, 2017-04-06@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 > --- > 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.