IB/iser: Support iSCSI PDU padding
RFC3270 mandates that iSCSI PDUs are padded to the closest integer number of four byte words. Fix the iser code to support that on both the TX/RX flows. Signed-off-by: Or Gerlitz <ogerlitz@mellanox.co.il> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
0ace64b85e
commit
200ae1a08b
2 changed files with 8 additions and 4 deletions
drivers/infiniband/ulp/iser
|
@ -101,13 +101,17 @@ iscsi_iser_recv(struct iscsi_conn *conn,
|
|||
|
||||
/* verify PDU length */
|
||||
datalen = ntoh24(hdr->dlength);
|
||||
if (datalen != rx_data_len) {
|
||||
printk(KERN_ERR "iscsi_iser: datalen %d (hdr) != %d (IB) \n",
|
||||
datalen, rx_data_len);
|
||||
if (datalen > rx_data_len || (datalen + 4) < rx_data_len) {
|
||||
iser_err("wrong datalen %d (hdr), %d (IB)\n",
|
||||
datalen, rx_data_len);
|
||||
rc = ISCSI_ERR_DATALEN;
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (datalen != rx_data_len)
|
||||
iser_dbg("aligned datalen (%d) hdr, %d (IB)\n",
|
||||
datalen, rx_data_len);
|
||||
|
||||
/* read AHS */
|
||||
ahslen = hdr->hlength * 4;
|
||||
|
||||
|
|
|
@ -412,7 +412,7 @@ int iser_send_control(struct iscsi_conn *conn,
|
|||
memcpy(iser_conn->ib_conn->login_buf, task->data,
|
||||
task->data_count);
|
||||
tx_dsg->addr = iser_conn->ib_conn->login_dma;
|
||||
tx_dsg->length = data_seg_len;
|
||||
tx_dsg->length = task->data_count;
|
||||
tx_dsg->lkey = device->mr->lkey;
|
||||
mdesc->num_sge = 2;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue