scsi: target: iscsi: cxgbit: fix max iso npdu calculation
- rounddown CXGBIT_MAX_ISO_PAYLOAD by csk->emss before calculating max_iso_npdu to get max TCP payload in multiple of mss. - call cxgbit_set_digest() before cxgbit_set_iso_npdu() to set csk->submode, it is used in calculating number of iso pdus. Signed-off-by: Varun Prakash <varun@chelsio.com> Reviewed-by: Mike Christie <mchristi@redhat.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
943e59fe78
commit
1b350ea0c2
|
@ -652,6 +652,7 @@ static int cxgbit_set_iso_npdu(struct cxgbit_sock *csk)
|
||||||
struct iscsi_param *param;
|
struct iscsi_param *param;
|
||||||
u32 mrdsl, mbl;
|
u32 mrdsl, mbl;
|
||||||
u32 max_npdu, max_iso_npdu;
|
u32 max_npdu, max_iso_npdu;
|
||||||
|
u32 max_iso_payload;
|
||||||
|
|
||||||
if (conn->login->leading_connection) {
|
if (conn->login->leading_connection) {
|
||||||
param = iscsi_find_param_from_key(MAXBURSTLENGTH,
|
param = iscsi_find_param_from_key(MAXBURSTLENGTH,
|
||||||
|
@ -670,7 +671,9 @@ static int cxgbit_set_iso_npdu(struct cxgbit_sock *csk)
|
||||||
mrdsl = conn_ops->MaxRecvDataSegmentLength;
|
mrdsl = conn_ops->MaxRecvDataSegmentLength;
|
||||||
max_npdu = mbl / mrdsl;
|
max_npdu = mbl / mrdsl;
|
||||||
|
|
||||||
max_iso_npdu = CXGBIT_MAX_ISO_PAYLOAD /
|
max_iso_payload = rounddown(CXGBIT_MAX_ISO_PAYLOAD, csk->emss);
|
||||||
|
|
||||||
|
max_iso_npdu = max_iso_payload /
|
||||||
(ISCSI_HDR_LEN + mrdsl +
|
(ISCSI_HDR_LEN + mrdsl +
|
||||||
cxgbit_digest_len[csk->submode]);
|
cxgbit_digest_len[csk->submode]);
|
||||||
|
|
||||||
|
@ -741,6 +744,9 @@ static int cxgbit_set_params(struct iscsi_conn *conn)
|
||||||
if (conn_ops->MaxRecvDataSegmentLength > cdev->mdsl)
|
if (conn_ops->MaxRecvDataSegmentLength > cdev->mdsl)
|
||||||
conn_ops->MaxRecvDataSegmentLength = cdev->mdsl;
|
conn_ops->MaxRecvDataSegmentLength = cdev->mdsl;
|
||||||
|
|
||||||
|
if (cxgbit_set_digest(csk))
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (conn->login->leading_connection) {
|
if (conn->login->leading_connection) {
|
||||||
param = iscsi_find_param_from_key(ERRORRECOVERYLEVEL,
|
param = iscsi_find_param_from_key(ERRORRECOVERYLEVEL,
|
||||||
conn->param_list);
|
conn->param_list);
|
||||||
|
@ -764,7 +770,7 @@ static int cxgbit_set_params(struct iscsi_conn *conn)
|
||||||
if (is_t5(cdev->lldi.adapter_type))
|
if (is_t5(cdev->lldi.adapter_type))
|
||||||
goto enable_ddp;
|
goto enable_ddp;
|
||||||
else
|
else
|
||||||
goto enable_digest;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (test_bit(CDEV_ISO_ENABLE, &cdev->flags)) {
|
if (test_bit(CDEV_ISO_ENABLE, &cdev->flags)) {
|
||||||
|
@ -781,10 +787,6 @@ enable_ddp:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enable_digest:
|
|
||||||
if (cxgbit_set_digest(csk))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue