diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index f3605ceae..d19e0da21 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -1581,8 +1581,7 @@ nvmf_rdma_calc_num_wrs(uint32_t length, uint32_t io_unit_size, uint32_t block_si static int nvmf_rdma_request_fill_iovs(struct spdk_nvmf_rdma_transport *rtransport, struct spdk_nvmf_rdma_device *device, - struct spdk_nvmf_rdma_request *rdma_req, - uint32_t length) + struct spdk_nvmf_rdma_request *rdma_req) { struct spdk_nvmf_rdma_qpair *rqpair; struct spdk_nvmf_rdma_poll_group *rgroup; @@ -1590,6 +1589,7 @@ nvmf_rdma_request_fill_iovs(struct spdk_nvmf_rdma_transport *rtransport, struct ibv_send_wr *wr = &rdma_req->data.wr; int rc; uint32_t num_wrs = 1; + uint32_t length; rqpair = SPDK_CONTAINEROF(req->qpair, struct spdk_nvmf_rdma_qpair, qpair); rgroup = rqpair->poller->group; @@ -1597,6 +1597,13 @@ nvmf_rdma_request_fill_iovs(struct spdk_nvmf_rdma_transport *rtransport, /* rdma wr specifics */ nvmf_rdma_setup_request(rdma_req); + length = req->length; + if (spdk_unlikely(req->dif_enabled)) { + req->dif.orig_length = length; + length = spdk_dif_get_length_with_md(length, &req->dif.dif_ctx); + req->dif.elba_length = length; + } + rc = spdk_nvmf_request_get_buffers(req, &rgroup->group, &rtransport->transport, length); if (rc != 0) { @@ -1790,13 +1797,7 @@ nvmf_rdma_request_parse_sgl(struct spdk_nvmf_rdma_transport *rtransport, /* fill request length and populate iovs */ req->length = length; - if (spdk_unlikely(req->dif_enabled)) { - req->dif.orig_length = length; - length = spdk_dif_get_length_with_md(length, &req->dif.dif_ctx); - req->dif.elba_length = length; - } - - rc = nvmf_rdma_request_fill_iovs(rtransport, device, rdma_req, length); + rc = nvmf_rdma_request_fill_iovs(rtransport, device, rdma_req); if (spdk_unlikely(rc < 0)) { if (rc == -EINVAL) { SPDK_ERRLOG("SGL length exceeds the max I/O size\n");