Message ID | 20201202115249.37690-31-hare@suse.de |
---|---|
State | Superseded |
Headers | show |
Series | None | expand |
On Wed, Dec 02, 2020 at 12:52:45PM +0100, Hannes Reinecke wrote: > A non-zero queuecommand() return code means 'busy', ie the command > hasn't been submitted. So any command which should be failed need > to be completed via the ->scsi_done() callback with the appropriate > result code set. > > Signed-off-by: Hannes Reinecke <hare@suse.de> Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de>
diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c index 2e6077c502fc..1a3c534826ba 100644 --- a/drivers/scsi/ips.c +++ b/drivers/scsi/ips.c @@ -1045,10 +1045,10 @@ static int ips_queue_lck(struct scsi_cmnd *SC, void (*done) (struct scsi_cmnd *) ha = (ips_ha_t *) SC->device->host->hostdata; if (!ha) - return (1); + goto out_error; if (!ha->active) - return (DID_ERROR); + goto out_error; if (ips_is_passthru(SC)) { if (ha->copp_waitlist.count == IPS_MAX_IOCTL_QUEUE) { @@ -1123,6 +1123,11 @@ static int ips_queue_lck(struct scsi_cmnd *SC, void (*done) (struct scsi_cmnd *) ips_next(ha, IPS_INTR_IORL); + return (0); +out_error: + SC->result = DID_ERROR << 16; + done(SC); + return (0); }
A non-zero queuecommand() return code means 'busy', ie the command hasn't been submitted. So any command which should be failed need to be completed via the ->scsi_done() callback with the appropriate result code set. Signed-off-by: Hannes Reinecke <hare@suse.de> --- drivers/scsi/ips.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)