From 61948a1ca7979d47ea0e0131f07518bdc6195ab1 Mon Sep 17 00:00:00 2001 From: Seth Howell Date: Fri, 26 Apr 2019 11:31:44 -0700 Subject: [PATCH] rdma: add check for allocating too many SRQ. We could run into issues with this if we were using an arbitrarily large amount of cores to run SPDK. Change-Id: Ia7add027d7e6ef1ccb4a69ac328dbdf4f2751fd8 Signed-off-by: Seth Howell Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/452250 Tested-by: SPDK CI Jenkins Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto --- lib/nvmf/rdma.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index f04a583bd..28ab0fe63 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -451,6 +451,8 @@ struct spdk_nvmf_rdma_device { struct spdk_mem_map *map; struct ibv_pd *pd; + int num_srq; + TAILQ_ENTRY(spdk_nvmf_rdma_device) link; }; @@ -2988,9 +2990,10 @@ spdk_nvmf_rdma_poll_group_create(struct spdk_nvmf_transport *transport) STAILQ_INIT(&poller->qpairs_pending_recv); TAILQ_INSERT_TAIL(&rgroup->pollers, poller, link); - if (transport->opts.no_srq == false && device->attr.max_srq != 0) { + if (transport->opts.no_srq == false && device->num_srq < device->attr.max_srq) { poller->max_srq_depth = transport->opts.max_srq_depth; + device->num_srq++; memset(&srq_init_attr, 0, sizeof(struct ibv_srq_init_attr)); srq_init_attr.attr.max_wr = poller->max_srq_depth; srq_init_attr.attr.max_sge = spdk_min(device->attr.max_sge, NVMF_DEFAULT_RX_SGE);