We currently implement our own tagging which just adds another layer of locks. For scsi cmds we can just use the block layer tags. This patch preps bnx2i for this change by having it use the correct itt to task look up function and then cap the can_queue to the max iscsi ITT it can support. Signed-off-by: Mike Christie <michael.christie@xxxxxxxxxx> --- drivers/scsi/bnx2i/bnx2i_hwi.c | 14 +++++++------- drivers/scsi/bnx2i/bnx2i_iscsi.c | 6 ++++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/drivers/scsi/bnx2i/bnx2i_hwi.c b/drivers/scsi/bnx2i/bnx2i_hwi.c index bad396e..7e53684 100644 --- a/drivers/scsi/bnx2i/bnx2i_hwi.c +++ b/drivers/scsi/bnx2i/bnx2i_hwi.c @@ -404,8 +404,8 @@ int bnx2i_send_iscsi_tmf(struct bnx2i_conn *bnx2i_conn, switch (tmfabort_hdr->flags & ISCSI_FLAG_TM_FUNC_MASK) { case ISCSI_TM_FUNC_ABORT_TASK: case ISCSI_TM_FUNC_TASK_REASSIGN: - ctask = iscsi_itt_to_task(conn, tmfabort_hdr->rtt); - if (!ctask || !ctask->sc) + ctask = iscsi_itt_to_ctask(conn, tmfabort_hdr->rtt); + if (!ctask) /* * the iscsi layer must have completed the cmd while * was starting up. @@ -1347,8 +1347,8 @@ int bnx2i_process_scsi_cmd_resp(struct iscsi_session *session, resp_cqe = (struct bnx2i_cmd_response *)cqe; spin_lock_bh(&session->back_lock); - task = iscsi_itt_to_task(conn, - resp_cqe->itt & ISCSI_CMD_RESPONSE_INDEX); + task = iscsi_itt_to_ctask(conn, + resp_cqe->itt & ISCSI_CMD_RESPONSE_INDEX); if (!task) goto fail; @@ -1908,9 +1908,9 @@ static int bnx2i_queue_scsi_cmd_resp(struct iscsi_session *session, int rc = 0; spin_lock(&session->back_lock); - task = iscsi_itt_to_task(bnx2i_conn->cls_conn->dd_data, - cqe->itt & ISCSI_CMD_RESPONSE_INDEX); - if (!task || !task->sc) { + task = iscsi_itt_to_ctask(bnx2i_conn->cls_conn->dd_data, + cqe->itt & ISCSI_CMD_RESPONSE_INDEX); + if (!task) { spin_unlock(&session->back_lock); return -EINVAL; } diff --git a/drivers/scsi/bnx2i/bnx2i_iscsi.c b/drivers/scsi/bnx2i/bnx2i_iscsi.c index eaccc04..b71f0db 100644 --- a/drivers/scsi/bnx2i/bnx2i_iscsi.c +++ b/drivers/scsi/bnx2i/bnx2i_iscsi.c @@ -763,6 +763,12 @@ static void bnx2i_setup_host_queue_size(struct bnx2i_hba *hba, shost->can_queue = ISCSI_MAX_CMDS_PER_HBA_57710; else shost->can_queue = ISCSI_MAX_CMDS_PER_HBA_5708; + /* + * We use the request's tag as the itt so cap the can_queue as + * the max SCSI cmd ITT. + */ + if (shost->can_queue > ISCSI_CMD_REQUEST_INDEX - ISCSI_MGMT_CMDS_MAX) + shost->can_queue = ISCSI_CMD_REQUEST_INDEX - ISCSI_MGMT_CMDS_MAX; } -- 1.8.3.1