} else {
conn->fault();
if (qp) {
- if (!cct->_conf->ms_async_rdma_cm)
- enqueue_dead_qp(qpn);
+ if (!cct->_conf->ms_async_rdma_cm) {
+ enqueue_dead_qp_lockless(qpn);
+ }
}
}
}
return get_qp_lockless(qp);
}
-void RDMADispatcher::enqueue_dead_qp(uint32_t qpn)
+void RDMADispatcher::enqueue_dead_qp_lockless(uint32_t qpn)
{
- std::lock_guard l{lock};
auto it = qp_conns.find(qpn);
if (it == qp_conns.end()) {
lderr(cct) << __func__ << " QP [" << qpn << "] is not registered." << dendl;
--num_qp_conn;
}
+void RDMADispatcher::enqueue_dead_qp(uint32_t qpn)
+{
+ std::lock_guard l{lock};
+ enqueue_dead_qp_lockless(qpn);
+}
+
void RDMADispatcher::schedule_qp_destroy(uint32_t qpn)
{
std::lock_guard l{lock};
ceph::make_mutex("RDMADispatcher::for worker pending list");
// fixme: lockfree
std::list<RDMAWorker*> pending_workers;
- void enqueue_dead_qp(uint32_t qp);
+ void enqueue_dead_qp_lockless(uint32_t qp);
+ void enqueue_dead_qp(uint32_t qpn);
public:
PerfCounters *perf_logger;