From c65b9cbced2402237aae51c53613da5d31bd94ba Mon Sep 17 00:00:00 2001 From: Arun Easi Date: Thu, 9 Feb 2012 11:16:01 -0800 Subject: [PATCH] --- yaml --- r: 292951 b: refs/heads/master c: a6fe35c052c4fdd1e8e21251f14eea0bd4bbd25b h: refs/heads/master i: 292949: 432ceb14eb4b05a58df57fbaa37f473336db86e3 292947: 693dc8913642d7bf2ced9823917da4c5b5e3758b 292943: fff6b437143b36fc3685d70788431f1070f5fa65 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/qla2xxx/qla_isr.c | 28 +++++++++++++++++----------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/[refs] b/[refs] index 1d8fb7318f8d..e303ee4e7bb6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: dafdf8923fbd298cc7bd1ec00aaa69b8a5ceced0 +refs/heads/master: a6fe35c052c4fdd1e8e21251f14eea0bd4bbd25b diff --git a/trunk/drivers/scsi/qla2xxx/qla_isr.c b/trunk/drivers/scsi/qla2xxx/qla_isr.c index fdead64eb7d1..f79844ce7122 100644 --- a/trunk/drivers/scsi/qla2xxx/qla_isr.c +++ b/trunk/drivers/scsi/qla2xxx/qla_isr.c @@ -1883,28 +1883,34 @@ qla2x00_error_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, sts_entry_t *pkt) struct qla_hw_data *ha = vha->hw; const char func[] = "ERROR-IOCB"; uint16_t que = MSW(pkt->handle); - struct req_que *req = ha->req_q_map[que]; + struct req_que *req = NULL; int res = DID_ERROR << 16; ql_dbg(ql_dbg_async, vha, 0x502a, "type of error status in response: 0x%x\n", pkt->entry_status); + if (que >= ha->max_req_queues || !ha->req_q_map[que]) + goto fatal; + + req = ha->req_q_map[que]; + if (pkt->entry_status & RF_BUSY) res = DID_BUS_BUSY << 16; sp = qla2x00_get_sp_from_handle(vha, func, req, pkt); - if (sp) + if (sp) { sp->done(ha, sp, res); - else { - ql_log(ql_log_warn, vha, 0x5030, - "Error entry - invalid handle.\n"); - - if (IS_QLA82XX(ha)) - set_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags); - else - set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); - qla2xxx_wake_dpc(vha); + return; } +fatal: + ql_log(ql_log_warn, vha, 0x5030, + "Error entry - invalid handle/queue.\n"); + + if (IS_QLA82XX(ha)) + set_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags); + else + set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); + qla2xxx_wake_dpc(vha); } /**