diff options
author | Don Brace <don.brace@microsemi.com> | 2019-07-24 17:08:06 -0500 |
---|---|---|
committer | Sasha Levin <sashal@kernel.org> | 2019-08-25 10:10:30 -0400 |
commit | a3980c1191b134f7d0fc33f42458ddb693fd32dd (patch) | |
tree | ee9209bde6c3a51799fc7862c373226dae1f7f4c | |
parent | 24a4b729176dd84ccea122447b73f391cf18b531 (diff) | |
download | linux-stable-a3980c1191b134f7d0fc33f42458ddb693fd32dd.tar.gz linux-stable-a3980c1191b134f7d0fc33f42458ddb693fd32dd.tar.bz2 linux-stable-a3980c1191b134f7d0fc33f42458ddb693fd32dd.zip |
scsi: hpsa: correct scsi command status issue after reset
[ Upstream commit eeebce1862970653cdf5c01e98bc669edd8f529a ]
Reviewed-by: Bader Ali - Saleh <bader.alisaleh@microsemi.com>
Reviewed-by: Scott Teel <scott.teel@microsemi.com>
Reviewed-by: Scott Benesh <scott.benesh@microsemi.com>
Reviewed-by: Kevin Barnett <kevin.barnett@microsemi.com>
Signed-off-by: Don Brace <don.brace@microsemi.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r-- | drivers/scsi/hpsa.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index 8068520cf89e..152de392f9aa 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c @@ -2320,6 +2320,8 @@ static int handle_ioaccel_mode2_error(struct ctlr_info *h, case IOACCEL2_SERV_RESPONSE_COMPLETE: switch (c2->error_data.status) { case IOACCEL2_STATUS_SR_TASK_COMP_GOOD: + if (cmd) + cmd->result = 0; break; case IOACCEL2_STATUS_SR_TASK_COMP_CHK_COND: cmd->result |= SAM_STAT_CHECK_CONDITION; @@ -2479,8 +2481,10 @@ static void process_ioaccel2_completion(struct ctlr_info *h, /* check for good status */ if (likely(c2->error_data.serv_response == 0 && - c2->error_data.status == 0)) + c2->error_data.status == 0)) { + cmd->result = 0; return hpsa_cmd_free_and_done(h, c, cmd); + } /* * Any RAID offload error results in retry which will use @@ -5639,6 +5643,12 @@ static int hpsa_scsi_queue_command(struct Scsi_Host *sh, struct scsi_cmnd *cmd) c = cmd_tagged_alloc(h, cmd); /* + * This is necessary because the SML doesn't zero out this field during + * error recovery. + */ + cmd->result = 0; + + /* * Call alternate submit routine for I/O accelerated commands. * Retries always go down the normal I/O path. */ |