msg/async/rdma: keep qp_conns lock to prevent connection alive

Signed-off-by: Haomai Wang <haomai@xsky.com>
This commit is contained in:
Haomai Wang 2017-03-02 11:44:59 +08:00
parent 97e0486979
commit 4323ec25c4
2 changed files with 2 additions and 13 deletions

View 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);

View 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; }