From ba323d44cac75a5cb13ea28b93545de64ff9e7c4 Mon Sep 17 00:00:00 2001 From: lorneli Date: Thu, 18 Jul 2019 16:34:11 +0800 Subject: [PATCH] nvmf/rdma: log spdk_nvmf_rdma_destroy_defunct_qpair Func spdk_nvmf_rdma_destroy_defunct_qpair is a "last chance option" to destroy qp manually if some driver/hardware doesn't drain qp's failed wr as expected. There's a probability that ibv_poll_cq polls wr of the destoryed qp after spdk_nvmf_rdma_destroy_defunct_qpair's execution. Although in practice the risk of this situation is minimal(if not non-existent), add a log here so that we could detect this situation easily. Change-Id: Ifa9534397513bcea34c18fbb8168eef8f53599c1 Signed-off-by: lorneli Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/462441 Reviewed-by: Seth Howell Reviewed-by: Changpeng Liu Reviewed-by: Darek Stojaczyk Reviewed-by: Ben Walker Tested-by: SPDK CI Jenkins --- lib/nvmf/rdma.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/nvmf/rdma.c b/lib/nvmf/rdma.c index 0d4d4131c..a5824ec15 100644 --- a/lib/nvmf/rdma.c +++ b/lib/nvmf/rdma.c @@ -3185,6 +3185,9 @@ spdk_nvmf_rdma_destroy_defunct_qpair(void *ctx) struct spdk_nvmf_rdma_transport *rtransport = SPDK_CONTAINEROF(rqpair->qpair.transport, struct spdk_nvmf_rdma_transport, transport); + SPDK_INFOLOG(SPDK_LOG_RDMA, "QP#%d hasn't been drained as expected, manually destroy it\n", + rqpair->qpair.qid); + spdk_nvmf_rdma_qpair_process_pending(rtransport, rqpair, true); spdk_nvmf_rdma_qpair_destroy(rqpair);