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 {
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);
}
}
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; }