iser-target: Avoid using FRMR for single dma entry requests
This patch changes isert_reg_rdma_frwr() to not use FRMR for single dma entry requests from small I/Os, in order to avoid the associated memory registration overhead. Using DMA MR is sufficient here for the single dma entry requests, and addresses a >= v3.12 performance regression. Signed-off-by: Vu Pham <vu@mellanox.com> Cc: <stable@vger.kernel.org> # v3.12+ Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
4863e52565
commit
f01b9f7339
|
@ -2297,6 +2297,13 @@ isert_reg_rdma_frwr(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
|
||||||
data_len = min(data_left, rdma_write_max);
|
data_len = min(data_left, rdma_write_max);
|
||||||
wr->cur_rdma_length = data_len;
|
wr->cur_rdma_length = data_len;
|
||||||
|
|
||||||
|
/* if there is a single dma entry, dma mr is sufficient */
|
||||||
|
if (count == 1) {
|
||||||
|
ib_sge->addr = ib_sg_dma_address(ib_dev, &sg_start[0]);
|
||||||
|
ib_sge->length = ib_sg_dma_len(ib_dev, &sg_start[0]);
|
||||||
|
ib_sge->lkey = isert_conn->conn_mr->lkey;
|
||||||
|
wr->fr_desc = NULL;
|
||||||
|
} else {
|
||||||
spin_lock_irqsave(&isert_conn->conn_lock, flags);
|
spin_lock_irqsave(&isert_conn->conn_lock, flags);
|
||||||
fr_desc = list_first_entry(&isert_conn->conn_frwr_pool,
|
fr_desc = list_first_entry(&isert_conn->conn_frwr_pool,
|
||||||
struct fast_reg_descriptor, list);
|
struct fast_reg_descriptor, list);
|
||||||
|
@ -2310,6 +2317,7 @@ isert_reg_rdma_frwr(struct iscsi_conn *conn, struct iscsi_cmd *cmd,
|
||||||
list_add_tail(&fr_desc->list, &isert_conn->conn_frwr_pool);
|
list_add_tail(&fr_desc->list, &isert_conn->conn_frwr_pool);
|
||||||
goto unmap_sg;
|
goto unmap_sg;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue