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: Chad Dupuis <chad.dupuis@qlogic.com> Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com> Signed-off-by: James Bottomley <JBottomley@Odin.com>
This commit is contained in:
parent
8fbdac8c70
commit
c7bc4cae0d
|
@ -19,7 +19,7 @@
|
|||
* | Device Discovery | 0x2016 | 0x2020-0x2022, |
|
||||
* | | | 0x2011-0x2012, |
|
||||
* | | | 0x2099-0x20a4 |
|
||||
* | Queue Command and IO tracing | 0x3059 | 0x300b |
|
||||
* | Queue Command and IO tracing | 0x3075 | 0x300b |
|
||||
* | | | 0x3027-0x3028 |
|
||||
* | | | 0x303d-0x3041 |
|
||||
* | | | 0x302d,0x3033 |
|
||||
|
|
|
@ -2073,14 +2073,18 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt)
|
|||
}
|
||||
|
||||
/* Validate handle. */
|
||||
if (handle < req->num_outstanding_cmds)
|
||||
if (handle < req->num_outstanding_cmds) {
|
||||
sp = req->outstanding_cmds[handle];
|
||||
else
|
||||
sp = NULL;
|
||||
|
||||
if (sp == NULL) {
|
||||
if (!sp) {
|
||||
ql_dbg(ql_dbg_io, vha, 0x3075,
|
||||
"%s(%ld): Already returned command for status handle (0x%x).\n",
|
||||
__func__, vha->host_no, sts->handle);
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
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 (IS_P3P_TYPE(ha))
|
||||
|
@ -2367,12 +2371,12 @@ out:
|
|||
ql_dbg(ql_dbg_io, fcport->vha, 0x3022,
|
||||
"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 "
|
||||
"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,
|
||||
cp->device->id, cp->device->lun, fcport->d_id.b.domain,
|
||||
fcport->d_id.b.area, fcport->d_id.b.al_pa, ox_id,
|
||||
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)
|
||||
sp->done(ha, sp, res);
|
||||
|
|
|
@ -958,8 +958,8 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)
|
|||
}
|
||||
|
||||
ql_dbg(ql_dbg_taskm, vha, 0x8002,
|
||||
"Aborting from RISC nexus=%ld:%d:%llu sp=%p cmd=%p\n",
|
||||
vha->host_no, id, lun, sp, cmd);
|
||||
"Aborting from RISC nexus=%ld:%d:%llu sp=%p cmd=%p handle=%x\n",
|
||||
vha->host_no, id, lun, sp, cmd, sp->handle);
|
||||
|
||||
/* Get a reference to the sp and drop the lock.*/
|
||||
sp_get(sp);
|
||||
|
|
Loading…
Reference in New Issue