From 4e4bb7f822e30f77688ec202ee9e011e331bcbd6 Mon Sep 17 00:00:00 2001 From: yidong0635 Date: Mon, 2 Mar 2020 11:16:41 -0500 Subject: [PATCH] rdma: Fix Segmentation fault when not sufficient memory for RDMA queue. Fix Segmentation fault on the target side. Issue: rdma.c:2752:spdk_nvmf_rdma_listen: *NOTICE*: *** NVMe/RDMA Target Listening on 192.168.35.11 port 4420 *** rdma.c: 789:nvmf_rdma_resources_create: *ERROR*: Unable to allocate sufficient memory for RDMA queue. rdma.c:3385:spdk_nvmf_rdma_poll_group_create: *ERROR*: Unable to allocate resources for shared receive queue. Segmentation fault (core dumped) GDB: Program terminated with signal 11, Segmentation fault. 736 if (resources->cmds_mr) { (gdb) bt 736 if (resources->cmds_mr) { (gdb) bt 0 nvmf_rdma_resources_destroy (resources=0x0) at rdma.c:736 1 0x0000000000497516 in spdk_nvmf_rdma_poll_group_destroy (group=group@entry=0x2fe1300) at rdma.c:3489 2 0x00000000004978bb in spdk_nvmf_rdma_poll_group_create (transport=0x2fe11d0) at rdma.c:3371 3 0x000000000048df70 in spdk_nvmf_transport_poll_group_create (transport=0x2fe11d0) at transport.c:267 4 0x000000000048a450 in spdk_nvmf_poll_group_add_transport (group=0x2f49af0, transport=) at nvmf.c:941 5 0x000000000048a6cb in spdk_nvmf_tgt_create_poll_group (io_device=0x2fce600, ctx_buf=0x2f49af0) at nvmf.c:122 6 0x00000000004a0492 in spdk_get_io_channel (io_device=0x2fce600) at thread.c:1324 7 0x000000000048a0e9 in spdk_nvmf_poll_group_create (tgt=) at nvmf.c:723 8 0x000000000047f230 in nvmf_tgt_create_poll_group (ctx=) at nvmf_tgt.c:356 9 0x000000000049f92b in spdk_on_thread (ctx=0x2f81b20) at thread.c:1065 10 0x000000000049f17d in _spdk_msg_queue_run_batch (max_msgs=, thread=0x1e67e90) at thread.c:554 11 spdk_thread_poll (thread=thread@entry=0x1e67e90, max_msgs=max_msgs@entry=0, now=now@entry=947267017376702) at thread.c:623 12 0x000000000049af86 in _spdk_reactor_run (arg=0x1e678c0) at reactor.c:342 13 0x000000000049b3a9 in spdk_reactors_start () at reactor.c:448 14 0x0000000000499a00 in spdk_app_start (opts=opts@entry=0x7ffc2a5e0ce0, start_fn=start_fn@entry=0x40aa80 , arg1=arg1@entry=0x0) at app.c:690 15 0x0000000000408237 in main (argc=5, argv=0x7ffc2a5e0e98) at nvmf_main.c:75 Signed-off-by: yidong0635 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1073 (master) (cherry picked from commit 9d93c08234468f0f91ee16bc9686cff8985bd3ba) Change-Id: Id9bf081964d0cf3575757e80fc7582b80776d554 Signed-off-by: Tomasz Zawadzki Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1301 Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Ben Walker Reviewed-by: Darek Stojaczyk --- lib/nvmf/rdma.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 9e4a7161f..4b2d18904 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -3499,7 +3499,9 @@ spdk_nvmf_rdma_poll_group_destroy(struct spdk_nvmf_transport_poll_group *group) } if (poller->srq) { - nvmf_rdma_resources_destroy(poller->resources); + if (poller->resources) { + nvmf_rdma_resources_destroy(poller->resources); + } ibv_destroy_srq(poller->srq); SPDK_DEBUGLOG(SPDK_LOG_RDMA, "Destroyed RDMA shared queue %p\n", poller->srq); }