Message ID | 20210118203430.4921-7-michael.christie@oracle.com |
---|---|
State | Superseded |
Headers | show |
Series | iscsi fixes/cleanups | expand |
On 1/18/21 12:34 PM, Mike Christie wrote: > We are setting the shost's can_queue after we add the host which is > too late, because scsi-ml will have allocated the tag set based on > the can_queue value at that time. This patch has us use the > iscsi_host_get_max_scsi_cmds helper to figure out the number of > scsi cmds. > > It also fixes up the template can_queue so it reflects the max scsi > cmds we can support like how other drivers work. > > Signed-off-by: Mike Christie <michael.christie@oracle.com> > --- > drivers/scsi/iscsi_tcp.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c > index a9ce6298b935..f0070e3c7ffa 100644 > --- a/drivers/scsi/iscsi_tcp.c > +++ b/drivers/scsi/iscsi_tcp.c > @@ -847,6 +847,7 @@ iscsi_sw_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max, > struct iscsi_session *session; > struct iscsi_sw_tcp_host *tcp_sw_host; > struct Scsi_Host *shost; > + int rc; > > if (ep) { > printk(KERN_ERR "iscsi_tcp: invalid ep %p.\n", ep); > @@ -864,6 +865,11 @@ iscsi_sw_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max, > shost->max_channel = 0; > shost->max_cmd_len = SCSI_MAX_VARLEN_CDB_SIZE; > > + rc = iscsi_host_get_max_scsi_cmds(shost, cmds_max); > + if (rc < 0) > + goto free_host; > + shost->can_queue = rc; > + > if (iscsi_host_add(shost, NULL)) > goto free_host; > > @@ -878,7 +884,6 @@ iscsi_sw_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max, > tcp_sw_host = iscsi_host_priv(shost); > tcp_sw_host->session = session; > > - shost->can_queue = session->scsi_cmds_max; > if (iscsi_tcp_r2tpool_alloc(session)) > goto remove_session; > return cls_session; > @@ -981,7 +986,7 @@ static struct scsi_host_template iscsi_sw_tcp_sht = { > .name = "iSCSI Initiator over TCP/IP", > .queuecommand = iscsi_queuecommand, > .change_queue_depth = scsi_change_queue_depth, > - .can_queue = ISCSI_DEF_XMIT_CMDS_MAX - 1, > + .can_queue = ISCSI_TOTAL_CMDS_MAX - ISCSI_MGMT_CMDS_MAX, > .sg_tablesize = 4096, > .max_sectors = 0xFFFF, > .cmd_per_lun = ISCSI_DEF_CMD_PER_LUN, > Reviewed-by: Lee Duncan <lduncan@suse.com>
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c index a9ce6298b935..f0070e3c7ffa 100644 --- a/drivers/scsi/iscsi_tcp.c +++ b/drivers/scsi/iscsi_tcp.c @@ -847,6 +847,7 @@ iscsi_sw_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max, struct iscsi_session *session; struct iscsi_sw_tcp_host *tcp_sw_host; struct Scsi_Host *shost; + int rc; if (ep) { printk(KERN_ERR "iscsi_tcp: invalid ep %p.\n", ep); @@ -864,6 +865,11 @@ iscsi_sw_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max, shost->max_channel = 0; shost->max_cmd_len = SCSI_MAX_VARLEN_CDB_SIZE; + rc = iscsi_host_get_max_scsi_cmds(shost, cmds_max); + if (rc < 0) + goto free_host; + shost->can_queue = rc; + if (iscsi_host_add(shost, NULL)) goto free_host; @@ -878,7 +884,6 @@ iscsi_sw_tcp_session_create(struct iscsi_endpoint *ep, uint16_t cmds_max, tcp_sw_host = iscsi_host_priv(shost); tcp_sw_host->session = session; - shost->can_queue = session->scsi_cmds_max; if (iscsi_tcp_r2tpool_alloc(session)) goto remove_session; return cls_session; @@ -981,7 +986,7 @@ static struct scsi_host_template iscsi_sw_tcp_sht = { .name = "iSCSI Initiator over TCP/IP", .queuecommand = iscsi_queuecommand, .change_queue_depth = scsi_change_queue_depth, - .can_queue = ISCSI_DEF_XMIT_CMDS_MAX - 1, + .can_queue = ISCSI_TOTAL_CMDS_MAX - ISCSI_MGMT_CMDS_MAX, .sg_tablesize = 4096, .max_sectors = 0xFFFF, .cmd_per_lun = ISCSI_DEF_CMD_PER_LUN,
We are setting the shost's can_queue after we add the host which is too late, because scsi-ml will have allocated the tag set based on the can_queue value at that time. This patch has us use the iscsi_host_get_max_scsi_cmds helper to figure out the number of scsi cmds. It also fixes up the template can_queue so it reflects the max scsi cmds we can support like how other drivers work. Signed-off-by: Mike Christie <michael.christie@oracle.com> --- drivers/scsi/iscsi_tcp.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)