]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async/rdma: keep qp_conns lock to prevent connection alive
authorHaomai Wang <haomai@xsky.com>
Thu, 2 Mar 2017 03:44:59 +0000 (11:44 +0800)
committerHaomai Wang <haomai@xsky.com>
Thu, 2 Mar 2017 03:44:59 +0000 (11:44 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/rdma/RDMAStack.cc
src/msg/async/rdma/RDMAStack.h

index d3ccfbe1ad2b5e842c4ee044017d93b3dcd34873..29d8d75d79d17748747ae7d5e2372abacafb32ef 100644 (file)
@@ -107,7 +107,8 @@ void RDMADispatcher::handle_async_event()
       uint64_t qpn = async_event.element.qp->qp_num;
       ldout(cct, 10) << __func__ << " event associated qp=" << async_event.element.qp
                      << " evt: " << ibv_event_type_str(async_event.event_type) << dendl;
-      RDMAConnectedSocketImpl *conn = get_conn_by_qp(qpn);
+      Mutex::Locker l(lock);
+      RDMAConnectedSocketImpl *conn = get_conn_lockless(qpn);
       if (!conn) {
         ldout(cct, 1) << __func__ << " missing qp_num=" << qpn << " discard event" << dendl;
       } else {
@@ -277,17 +278,6 @@ int RDMADispatcher::register_qp(QueuePair *qp, RDMAConnectedSocketImpl* csi)
   return fd;
 }
 
-RDMAConnectedSocketImpl* RDMADispatcher::get_conn_by_qp(uint32_t qp)
-{
-  Mutex::Locker l(lock);
-  auto it = qp_conns.find(qp);
-  if (it == qp_conns.end())
-    return nullptr;
-  if (it->second.first->is_dead())
-    return nullptr;
-  return it->second.second;
-}
-
 RDMAConnectedSocketImpl* RDMADispatcher::get_conn_lockless(uint32_t qp)
 {
   auto it = qp_conns.find(qp);
index f4b09779eef0f4d102e56638f57f29ac2cd480f7..c4aed9d8d9aa65b5749be56eaf1cbb31e7b29d8c 100644 (file)
@@ -127,7 +127,6 @@ class RDMADispatcher : public CephContext::ForkWatcher {
     }
   }
   RDMAStack* get_stack() { return stack; }
-  RDMAConnectedSocketImpl* get_conn_by_qp(uint32_t qp);
   RDMAConnectedSocketImpl* get_conn_lockless(uint32_t qp);
   void erase_qpn(uint32_t qpn);
   Infiniband::CompletionQueue* get_tx_cq() const { return tx_cq; }