aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiridhar Malavali <[email protected]>2019-04-02 14:24:20 -0700
committerMartin K. Petersen <[email protected]>2019-04-03 23:11:36 -0400
commit740e29358e350077d18ee08700199e37b206edad (patch)
treebc48bc493ee1e9c3cc85165d4908f1d89967baf3
parentd6d189ceab75560e312ffefe6e8d423a5c3aa0e6 (diff)
scsi: qla2xxx: Set the SCSI command result before calling the command done
This patch tries to address race condition between abort handler and completion handler. When scsi command result is set by both abort and completion handler, scsi_done() is only called after refcount on SRB structure goes to zero. The abort handler sets this result prematurely even when the refcount is non-zero value. Fix this by setting SCSI cmd->result before scsi_done() is called. Signed-off-by: Giridhar Malavali <[email protected]> Signed-off-by: Himanshu Madhani <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
-rw-r--r--drivers/scsi/qla2xxx/qla_os.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
index b6f37b651bca..79d5ea835924 100644
--- a/drivers/scsi/qla2xxx/qla_os.c
+++ b/drivers/scsi/qla2xxx/qla_os.c
@@ -765,8 +765,6 @@ qla2x00_sp_compl(void *ptr, int res)
srb_t *sp = ptr;
struct scsi_cmnd *cmd = GET_CMD_SP(sp);
- cmd->result = res;
-
if (atomic_read(&sp->ref_count) == 0) {
ql_dbg(ql_dbg_io, sp->vha, 0x3015,
"SP reference-count to ZERO -- sp=%p cmd=%p.\n",
@@ -779,6 +777,7 @@ qla2x00_sp_compl(void *ptr, int res)
return;
sp->free(sp);
+ cmd->result = res;
cmd->scsi_done(cmd);
}