From f4af675f684562e0f6a635fbd6493136462a2e93 Mon Sep 17 00:00:00 2001 From: Adir Lev Date: Sun, 30 Apr 2017 11:34:43 +0000 Subject: [PATCH] msg/async/rdma: check if fin message completed Change-Id: I9cb1e523be7b21127503a9252b09331a37bea204 Signed-off-by: Alexander Mikheev Signed-off-by: Adir Lev --- src/msg/async/rdma/RDMAStack.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/msg/async/rdma/RDMAStack.cc b/src/msg/async/rdma/RDMAStack.cc index 77cb4b7a96302..608c4f5c91ce3 100644 --- a/src/msg/async/rdma/RDMAStack.cc +++ b/src/msg/async/rdma/RDMAStack.cc @@ -362,11 +362,16 @@ void RDMADispatcher::handle_tx_event(ibv_wc *cqe, int n) } } - // FIXME: why not tx? - if (global_infiniband->get_memory_manager()->is_tx_buffer(chunk->buffer)) + //TX completion may come either from regular send message or from 'fin' message. + //In the case of 'fin' wr_id points to the QueuePair. + if (global_infiniband->get_memory_manager()->is_tx_buffer(chunk->buffer)) { tx_chunks.push_back(chunk); - else + } else if (reinterpret_cast(response->wr_id)->get_local_qp_number() == response->qp_num ) { + ldout(cct, 1) << __func__ << " sending of the disconnect msg completed" << dendl; + } else { ldout(cct, 1) << __func__ << " not tx buffer, chunk " << chunk << dendl; + ceph_abort(); + } } perf_logger->inc(l_msgr_rdma_tx_total_wc, n); -- 2.39.5