From 6ec974ed0795c982f90be016c2eec367a410d261 Mon Sep 17 00:00:00 2001 From: Alexey Marchuk Date: Wed, 2 Oct 2019 10:28:38 +0000 Subject: [PATCH] rdma: Update request length in multi SGL case when dif_insert_or_strip is enabled Change-Id: I70e82b1dc2c0db5db5b5835fed5995d5d0156971 Signed-off-by: Alexey Marchuk Signed-off-by: Sasha Kotchubievsky Signed-off-by: Evgenii Kochetov Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/470470 Reviewed-by: Shuhei Matsumoto Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins --- lib/nvmf/rdma.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index bfc0b5210..79fff7c4f 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -1723,7 +1723,13 @@ nvmf_rdma_request_fill_iovs_multi_sgl(struct spdk_nvmf_rdma_transport *rtranspor desc = (struct spdk_nvme_sgl_descriptor *)rdma_req->recv->buf + inline_segment->address; for (i = 0; i < num_sgl_descriptors; i++) { - lengths[i] = desc->keyed.length; + if (spdk_likely(!req->dif.dif_insert_or_strip)) { + lengths[i] = desc->keyed.length; + } else { + req->dif.orig_length += desc->keyed.length; + lengths[i] = spdk_dif_get_length_with_md(desc->keyed.length, &req->dif.dif_ctx); + req->dif.elba_length += lengths[i]; + } desc++; } @@ -1751,7 +1757,7 @@ nvmf_rdma_request_fill_iovs_multi_sgl(struct spdk_nvmf_rdma_transport *rtranspor current_wr->num_sge = 0; - rc = nvmf_rdma_fill_wr_sgl(rgroup, device, rdma_req, current_wr, desc->keyed.length); + rc = nvmf_rdma_fill_wr_sgl(rgroup, device, rdma_req, current_wr, lengths[i]); if (rc != 0) { rc = -ENOMEM; goto err_exit;