From cdf80adcccc9428480427864637b6020be649911 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 21 Aug 2019 08:19:21 +0900 Subject: [PATCH] nvmf/fc: Check if buffer came from pool prior to nvmf_fc_request_free_buffers() NVMe-oF FC transport have used its own buffer pool and have not used common buffer pool yet. It looks that there is no particular reason to prevent FC transport from using the common buffer pool. This patch extract checking fc_req->data_from_pool from nvmf_fc_request_free_buffers() to make the transition easier. fc_req->req.iovcnt and fc_req->req.data should be cleared regardless of fc_req->data_from_pool. Hence extract them into callees. Signed-off-by: Shuhei Matsumoto Change-Id: I36420f0e573d1ec3f9f3a75f6b2ced82ade89dd3 Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/465864 Reviewed-by: Broadcom SPDK FC-NVMe CI Reviewed-by: Jim Harris Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins --- lib/nvmf/fc.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/lib/nvmf/fc.c b/lib/nvmf/fc.c index 589f66b42..d6a613477 100644 --- a/lib/nvmf/fc.c +++ b/lib/nvmf/fc.c @@ -419,17 +419,15 @@ nvmf_fc_req_in_get_buff(struct spdk_nvmf_fc_request *fc_req) static void nvmf_fc_request_free_buffers(struct spdk_nvmf_fc_request *fc_req) { - if (fc_req->data_from_pool) { - for (uint32_t i = 0; i < fc_req->req.iovcnt; i++) { - spdk_mempool_put(fc_req->hwqp->fc_poll_group->fc_transport->data_buff_pool, - fc_req->buffers[i]); - fc_req->req.iov[i].iov_base = NULL; - fc_req->buffers[i] = NULL; - } - fc_req->data_from_pool = false; + uint32_t i; + + for (i = 0; i < fc_req->req.iovcnt; i++) { + spdk_mempool_put(fc_req->hwqp->fc_poll_group->fc_transport->data_buff_pool, + fc_req->buffers[i]); + fc_req->req.iov[i].iov_base = NULL; + fc_req->buffers[i] = NULL; } - fc_req->req.data = NULL; - fc_req->req.iovcnt = 0; + fc_req->data_from_pool = false; } void @@ -1320,6 +1318,7 @@ nvmf_fc_request_alloc_buffers(struct spdk_nvmf_fc_request *fc_req) nomem: nvmf_fc_request_free_buffers(fc_req); + fc_req->req.iovcnt = 0; return -ENOMEM; } @@ -1486,7 +1485,11 @@ spdk_nvmf_fc_request_free(struct spdk_nvmf_fc_request *fc_req) } /* Release IO buffers */ - nvmf_fc_request_free_buffers(fc_req); + if (fc_req->data_from_pool) { + nvmf_fc_request_free_buffers(fc_req); + } + fc_req->req.data = NULL; + fc_req->req.iovcnt = 0; /* Release Q buffer */ nvmf_fc_rqpair_buffer_release(fc_req->hwqp, fc_req->buf_index);