From 6ea9de5fc880fe1bddcce0d95dac09c7312d3a09 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Wed, 31 Aug 2022 06:56:52 +0900 Subject: [PATCH] nvme_rdma: Factor out poller destroy operation Poller will have more shared resources when SRQ is supported. This is a preparation. Signed-off-by: Shuhei Matsumoto Signed-off-by: Denis Nagorny Signed-off-by: Evgeniy Kochetov Change-Id: Ic3d1cb93dde3f53653a9536a103e5518cebd58e1 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14173 Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot Reviewed-by: Ben Walker Reviewed-by: Aleksey Marchuk --- lib/nvme/nvme_rdma.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/lib/nvme/nvme_rdma.c b/lib/nvme/nvme_rdma.c index c55b60cbc..bda78387e 100644 --- a/lib/nvme/nvme_rdma.c +++ b/lib/nvme/nvme_rdma.c @@ -2733,6 +2733,15 @@ nvme_rdma_admin_qpair_abort_aers(struct spdk_nvme_qpair *qpair) } } +static void +nvme_rdma_poller_destroy(struct nvme_rdma_poller *poller) +{ + if (poller->cq) { + ibv_destroy_cq(poller->cq); + } + free(poller); +} + static struct nvme_rdma_poller * nvme_rdma_poller_create(struct nvme_rdma_poll_group *group, struct ibv_context *ctx) { @@ -2749,8 +2758,7 @@ nvme_rdma_poller_create(struct nvme_rdma_poll_group *group, struct ibv_context * if (poller->cq == NULL) { SPDK_ERRLOG("Unable to create CQ, errno %d.\n", errno); - free(poller); - return NULL; + goto fail; } STAILQ_INSERT_HEAD(&group->pollers, poller, link); @@ -2758,6 +2766,10 @@ nvme_rdma_poller_create(struct nvme_rdma_poll_group *group, struct ibv_context * poller->current_num_wc = DEFAULT_NVME_RDMA_CQ_SIZE; poller->required_num_wc = 0; return poller; + +fail: + nvme_rdma_poller_destroy(poller); + return NULL; } static void @@ -2772,11 +2784,8 @@ nvme_rdma_poll_group_free_pollers(struct nvme_rdma_poll_group *group) poller, poller->refcnt); } - if (poller->cq) { - ibv_destroy_cq(poller->cq); - } STAILQ_REMOVE(&group->pollers, poller, nvme_rdma_poller, link); - free(poller); + nvme_rdma_poller_destroy(poller); } } @@ -2808,12 +2817,9 @@ nvme_rdma_poll_group_put_poller(struct nvme_rdma_poll_group *group, struct nvme_ { assert(poller->refcnt > 0); if (--poller->refcnt == 0) { - if (poller->cq) { - ibv_destroy_cq(poller->cq); - } STAILQ_REMOVE(&group->pollers, poller, nvme_rdma_poller, link); - free(poller); group->num_pollers--; + nvme_rdma_poller_destroy(poller); } }