Commit c7bc4cae authored by Chad Dupuis's avatar Chad Dupuis Committed by James Bottomley

qla2xxx: Do not reset adapter if SRB handle is in range.

If an SRB is NULL but the handle is in range just drop the
command instead of also resetting the adapter. If the handle
is in range then the command was valid at some point and may
have been aborted. Resetting the adapter can lead to extended
recovery times in this case.
Signed-off-by: default avatarChad Dupuis <chad.dupuis@qlogic.com>
Signed-off-by: default avatarHimanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Odin.com>
parent 8fbdac8c
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
* | Device Discovery | 0x2016 | 0x2020-0x2022, | * | Device Discovery | 0x2016 | 0x2020-0x2022, |
* | | | 0x2011-0x2012, | * | | | 0x2011-0x2012, |
* | | | 0x2099-0x20a4 | * | | | 0x2099-0x20a4 |
* | Queue Command and IO tracing | 0x3059 | 0x300b | * | Queue Command and IO tracing | 0x3075 | 0x300b |
* | | | 0x3027-0x3028 | * | | | 0x3027-0x3028 |
* | | | 0x303d-0x3041 | * | | | 0x303d-0x3041 |
* | | | 0x302d,0x3033 | * | | | 0x302d,0x3033 |
......
...@@ -2073,14 +2073,18 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) ...@@ -2073,14 +2073,18 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
} }
/* Validate handle. */ /* Validate handle. */
if (handle < req->num_outstanding_cmds) if (handle < req->num_outstanding_cmds) {
sp = req->outstanding_cmds[handle]; sp = req->outstanding_cmds[handle];
else if (!sp) {
sp = NULL; ql_dbg(ql_dbg_io, vha, 0x3075,
"%s(%ld): Already returned command for status handle (0x%x).\n",
if (sp == NULL) { __func__, vha->host_no, sts->handle);
return;
}
} else {
ql_dbg(ql_dbg_io, vha, 0x3017, ql_dbg(ql_dbg_io, vha, 0x3017,
"Invalid status handle (0x%x).\n", sts->handle); "Invalid status handle, out of range (0x%x).\n",
sts->handle);
if (!test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags)) { if (!test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags)) {
if (IS_P3P_TYPE(ha)) if (IS_P3P_TYPE(ha))
...@@ -2367,12 +2371,12 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) ...@@ -2367,12 +2371,12 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
ql_dbg(ql_dbg_io, fcport->vha, 0x3022, ql_dbg(ql_dbg_io, fcport->vha, 0x3022,
"FCP command status: 0x%x-0x%x (0x%x) nexus=%ld:%d:%llu " "FCP command status: 0x%x-0x%x (0x%x) nexus=%ld:%d:%llu "
"portid=%02x%02x%02x oxid=0x%x cdb=%10phN len=0x%x " "portid=%02x%02x%02x oxid=0x%x cdb=%10phN len=0x%x "
"rsp_info=0x%x resid=0x%x fw_resid=0x%x.\n", "rsp_info=0x%x resid=0x%x fw_resid=0x%x sp=%p cp=%p.\n",
comp_status, scsi_status, res, vha->host_no, comp_status, scsi_status, res, vha->host_no,
cp->device->id, cp->device->lun, fcport->d_id.b.domain, cp->device->id, cp->device->lun, fcport->d_id.b.domain,
fcport->d_id.b.area, fcport->d_id.b.al_pa, ox_id, fcport->d_id.b.area, fcport->d_id.b.al_pa, ox_id,
cp->cmnd, scsi_bufflen(cp), rsp_info_len, cp->cmnd, scsi_bufflen(cp), rsp_info_len,
resid_len, fw_resid_len); resid_len, fw_resid_len, sp, cp);
if (rsp->status_srb == NULL) if (rsp->status_srb == NULL)
sp->done(ha, sp, res); sp->done(ha, sp, res);
......
...@@ -958,8 +958,8 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd) ...@@ -958,8 +958,8 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
} }
ql_dbg(ql_dbg_taskm, vha, 0x8002, ql_dbg(ql_dbg_taskm, vha, 0x8002,
"Aborting from RISC nexus=%ld:%d:%llu sp=%p cmd=%p\n", "Aborting from RISC nexus=%ld:%d:%llu sp=%p cmd=%p handle=%x\n",
vha->host_no, id, lun, sp, cmd); vha->host_no, id, lun, sp, cmd, sp->handle);
/* Get a reference to the sp and drop the lock.*/ /* Get a reference to the sp and drop the lock.*/
sp_get(sp); sp_get(sp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment