From 88188179f36cade2ccb7f4734ee6430144aa060b Mon Sep 17 00:00:00 2001 From: Hannes Reinecke Date: Wed, 13 Jan 2021 10:04:56 +0100 Subject: [PATCH] scsi: ips: Use correct command completion on error A non-zero queuecommand() return code means 'busy', i.e. 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. Link: https://lore.kernel.org/r/20210113090500.129644-32-hare@suse.de Reviewed-by: Christoph Hellwig Signed-off-by: Hannes Reinecke Signed-off-by: Martin K. Petersen --- drivers/scsi/ips.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/ips.c b/drivers/scsi/ips.c index 2e6077c..1a3c534 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) { @@ -1124,6 +1124,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); } static DEF_SCSI_QCMD(ips_queue) -- 2.7.4