Commit 8e9a20ce authored by Mike Christie's avatar Mike Christie Committed by James Bottomley

[SCSI] libiscsi, iscsi_tcp, ib_iser: fix setting of can_queue with old tools.

This patch fixes two bugs that are related.

1. Old tools did not set can_queue/cmds_max. This patch modifies
libiscsi so that when we add the host we catch this and set it
to the default.

2. iscsi_tcp thought that the scsi command that was passed to
the eh functions needed a iscsi_cmd_task allocated for it. It
only needed a mgmt task, and now it does not matter since it
all comes from the same pool and libiscsi handles this for the
drivers. ib_iser had copied iscsi_tcp's code and set can_queue
to its max - 1 to handle this. So this patch removes the max -1,
and just sets it to the max.
Signed-off-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@HansenPartnership.com>
parent c95fddc7
...@@ -595,7 +595,6 @@ static struct scsi_host_template iscsi_iser_sht = { ...@@ -595,7 +595,6 @@ static struct scsi_host_template iscsi_iser_sht = {
.name = "iSCSI Initiator over iSER, v." DRV_VER, .name = "iSCSI Initiator over iSER, v." DRV_VER,
.queuecommand = iscsi_queuecommand, .queuecommand = iscsi_queuecommand,
.change_queue_depth = iscsi_change_queue_depth, .change_queue_depth = iscsi_change_queue_depth,
.can_queue = ISCSI_DEF_XMIT_CMDS_MAX - 1,
.sg_tablesize = ISCSI_ISER_SG_TABLESIZE, .sg_tablesize = ISCSI_ISER_SG_TABLESIZE,
.max_sectors = 1024, .max_sectors = 1024,
.cmd_per_lun = ISCSI_MAX_CMD_PER_LUN, .cmd_per_lun = ISCSI_MAX_CMD_PER_LUN,
......
...@@ -1865,7 +1865,6 @@ iscsi_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max, ...@@ -1865,7 +1865,6 @@ iscsi_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max,
shost->max_id = 0; shost->max_id = 0;
shost->max_channel = 0; shost->max_channel = 0;
shost->max_cmd_len = SCSI_MAX_VARLEN_CDB_SIZE; shost->max_cmd_len = SCSI_MAX_VARLEN_CDB_SIZE;
shost->can_queue = cmds_max;
if (iscsi_host_add(shost, NULL)) if (iscsi_host_add(shost, NULL))
goto free_host; goto free_host;
......
...@@ -1857,6 +1857,9 @@ EXPORT_SYMBOL_GPL(iscsi_pool_free); ...@@ -1857,6 +1857,9 @@ EXPORT_SYMBOL_GPL(iscsi_pool_free);
*/ */
int iscsi_host_add(struct Scsi_Host *shost, struct device *pdev) int iscsi_host_add(struct Scsi_Host *shost, struct device *pdev)
{ {
if (!shost->can_queue)
shost->can_queue = ISCSI_DEF_XMIT_CMDS_MAX;
return scsi_add_host(shost, pdev); return scsi_add_host(shost, pdev);
} }
EXPORT_SYMBOL_GPL(iscsi_host_add); EXPORT_SYMBOL_GPL(iscsi_host_add);
...@@ -1942,6 +1945,9 @@ iscsi_session_setup(struct iscsi_transport *iscsit, struct Scsi_Host *shost, ...@@ -1942,6 +1945,9 @@ iscsi_session_setup(struct iscsi_transport *iscsit, struct Scsi_Host *shost,
struct iscsi_session *session; struct iscsi_session *session;
struct iscsi_cls_session *cls_session; struct iscsi_cls_session *cls_session;
int cmd_i, scsi_cmds, total_cmds = cmds_max; int cmd_i, scsi_cmds, total_cmds = cmds_max;
if (!total_cmds)
total_cmds = ISCSI_DEF_XMIT_CMDS_MAX;
/* /*
* The iscsi layer needs some tasks for nop handling and tmfs, * The iscsi layer needs some tasks for nop handling and tmfs,
* so the cmds_max must at least be greater than ISCSI_MGMT_CMDS_MAX * so the cmds_max must at least be greater than ISCSI_MGMT_CMDS_MAX
......
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