Commit 68348441 authored by Sagi Grimberg's avatar Sagi Grimberg Committed by Jason Gunthorpe

IB/iser: set can_queue earlier to allow setting higher queue depth

We need to set can_queue earlier than when enabling the scsi host.
in a blk-mq enabled environment, the tagset allocation is taken
from can_queue which cannot be modified later. Also, pass an updated
.can_queue to iscsi_session_setup to have enough iscsi tasks allocated
in the session kfifo.
Reported-by: default avatarKarandeep Chahal <karandeepchahal@gmail.com>
Signed-off-by: default avatarSagi Grimberg <sagi@grimberg.me>
Reviewed-by: default avatarMax Gurtovoy <maxg@mellanox.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 24c937b3
...@@ -633,8 +633,8 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep, ...@@ -633,8 +633,8 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep,
*/ */
if (ep) { if (ep) {
iser_conn = ep->dd_data; iser_conn = ep->dd_data;
max_cmds = iser_conn->max_cmds;
shost->sg_tablesize = iser_conn->scsi_sg_tablesize; shost->sg_tablesize = iser_conn->scsi_sg_tablesize;
shost->can_queue = min_t(u16, cmds_max, iser_conn->max_cmds);
mutex_lock(&iser_conn->state_mutex); mutex_lock(&iser_conn->state_mutex);
if (iser_conn->state != ISER_CONN_UP) { if (iser_conn->state != ISER_CONN_UP) {
...@@ -660,6 +660,7 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep, ...@@ -660,6 +660,7 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep,
} }
mutex_unlock(&iser_conn->state_mutex); mutex_unlock(&iser_conn->state_mutex);
} else { } else {
shost->can_queue = min_t(u16, cmds_max, ISER_DEF_XMIT_CMDS_MAX);
max_cmds = ISER_DEF_XMIT_CMDS_MAX; max_cmds = ISER_DEF_XMIT_CMDS_MAX;
if (iscsi_host_add(shost, NULL)) if (iscsi_host_add(shost, NULL))
goto free_host; goto free_host;
...@@ -676,21 +677,14 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep, ...@@ -676,21 +677,14 @@ iscsi_iser_session_create(struct iscsi_endpoint *ep,
iser_warn("max_sectors was reduced from %u to %u\n", iser_warn("max_sectors was reduced from %u to %u\n",
iser_max_sectors, shost->max_sectors); iser_max_sectors, shost->max_sectors);
if (cmds_max > max_cmds) {
iser_info("cmds_max changed from %u to %u\n",
cmds_max, max_cmds);
cmds_max = max_cmds;
}
cls_session = iscsi_session_setup(&iscsi_iser_transport, shost, cls_session = iscsi_session_setup(&iscsi_iser_transport, shost,
cmds_max, 0, shost->can_queue, 0,
sizeof(struct iscsi_iser_task), sizeof(struct iscsi_iser_task),
initial_cmdsn, 0); initial_cmdsn, 0);
if (!cls_session) if (!cls_session)
goto remove_host; goto remove_host;
session = cls_session->dd_data; session = cls_session->dd_data;
shost->can_queue = session->scsi_cmds_max;
return cls_session; return cls_session;
remove_host: remove_host:
......
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