diff options
author | Jayamohan Kallickal <jayamohan.kallickal@emulex.com> | 2011-10-07 20:31:10 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2011-10-16 12:03:19 -0400 |
commit | bd5354511d00cb9c81c64b0544786807a2209488 (patch) | |
tree | 4b6c293978decaa611a86c1c49fb6e477c88fe60 | |
parent | 685e16fdcf4324fe75ff28940311598f01704eaa (diff) |
[SCSI] be2iscsi: Fix for case where task->sc was cleanedup earlier
This patch fixes a bug where the task->sc was cleaned up earlier on a
different thread, possibly abort, and the completion comes later.
This was causing a crash which has been reported in multiple places
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
-rw-r--r-- | drivers/scsi/be2iscsi/be_main.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c index e166d547a341..7b0a8ab71049 100644 --- a/drivers/scsi/be2iscsi/be_main.c +++ b/drivers/scsi/be2iscsi/be_main.c | |||
@@ -1123,7 +1123,12 @@ be_complete_io(struct beiscsi_conn *beiscsi_conn, | |||
1123 | & SOL_STS_MASK) >> 8); | 1123 | & SOL_STS_MASK) >> 8); |
1124 | flags = ((psol->dw[offsetof(struct amap_sol_cqe, i_flags) / 32] | 1124 | flags = ((psol->dw[offsetof(struct amap_sol_cqe, i_flags) / 32] |
1125 | & SOL_FLAGS_MASK) >> 24) | 0x80; | 1125 | & SOL_FLAGS_MASK) >> 24) | 0x80; |
1126 | if (!task->sc) { | ||
1127 | if (io_task->scsi_cmnd) | ||
1128 | scsi_dma_unmap(io_task->scsi_cmnd); | ||
1126 | 1129 | ||
1130 | return; | ||
1131 | } | ||
1127 | task->sc->result = (DID_OK << 16) | status; | 1132 | task->sc->result = (DID_OK << 16) | status; |
1128 | if (rsp != ISCSI_STATUS_CMD_COMPLETED) { | 1133 | if (rsp != ISCSI_STATUS_CMD_COMPLETED) { |
1129 | task->sc->result = DID_ERROR << 16; | 1134 | task->sc->result = DID_ERROR << 16; |