From f0c212614ad65f2310a21031f0281df49534d61b Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 24 Sep 2019 13:07:02 +0900 Subject: [PATCH] nvmf/rdma: Fix req->length was not cleared when nvmf_rdma_fill_buffers() fails In nvmf_rdma_requst_fill_iovs_multi_sgl(), length of descriptors are accumulated into req->length. However, req->length was not cleared when nvmf_rdma_fill_buffers() fails in the middle. This patch fixes it. Signed-off-by: Shuhei Matsumoto Change-Id: I80a55d90d09c8af46d570e017d342afd69f41996 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/469199 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Changpeng Liu Reviewed-by: Alexey Marchuk Reviewed-by: Seth Howell Reviewed-by: Paul Luse --- lib/nvmf/rdma.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index cc3d75521..1078fe3ec 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -1769,6 +1769,7 @@ nvmf_rdma_request_fill_iovs_multi_sgl(struct spdk_nvmf_rdma_transport *rtranspor assert(current_wr != NULL); req->iovcnt = 0; + req->length = 0; desc = (struct spdk_nvme_sgl_descriptor *)rdma_req->recv->buf + inline_segment->address; for (i = 0; i < num_sgl_descriptors; i++) { /* The descriptors must be keyed data block descriptors with an address, not an offset. */ @@ -1779,7 +1780,6 @@ nvmf_rdma_request_fill_iovs_multi_sgl(struct spdk_nvmf_rdma_transport *rtranspor } current_wr->num_sge = 0; - req->length += desc->keyed.length; rc = nvmf_rdma_fill_buffers(rtransport, rgroup, device, req, current_wr, desc->keyed.length); @@ -1788,6 +1788,7 @@ nvmf_rdma_request_fill_iovs_multi_sgl(struct spdk_nvmf_rdma_transport *rtranspor goto err_exit; } + req->length += desc->keyed.length; current_wr->wr.rdma.rkey = desc->keyed.key; current_wr->wr.rdma.remote_addr = desc->address; current_wr = current_wr->next;