From: Haomai Wang Date: Mon, 27 Feb 2017 10:24:56 +0000 (+0800) Subject: msg/async/rdma: remove lock protection for pending_sent_conns X-Git-Tag: v12.0.1~212^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=789148466425307bf90e4d7e6b7bca8ec1bc5ecf;p=ceph.git msg/async/rdma: remove lock protection for pending_sent_conns Signed-off-by: Haomai Wang --- diff --git a/src/msg/async/rdma/RDMAStack.cc b/src/msg/async/rdma/RDMAStack.cc index 1f0a84ad71a0..ec01760bda24 100644 --- a/src/msg/async/rdma/RDMAStack.cc +++ b/src/msg/async/rdma/RDMAStack.cc @@ -435,6 +435,7 @@ int RDMAWorker::connect(const entity_addr_t &addr, const SocketOptions &opts, Co int RDMAWorker::reserve_message_buffer(RDMAConnectedSocketImpl *o, std::vector &c, size_t bytes) { + assert(center.in_thread()); int r = infiniband->get_tx_buffers(c, bytes); if (r > 0) { stack->get_dispatcher()->inflight += r; @@ -444,11 +445,8 @@ int RDMAWorker::reserve_message_buffer(RDMAConnectedSocketImpl *o, std::vectorpending_buffers(this); } return r; @@ -464,6 +462,7 @@ int RDMAWorker::reserve_message_buffer(RDMAConnectedSocketImpl *o, std::vector &chunks) { + assert(center.in_thread()); if (chunks.empty()) return ; @@ -472,16 +471,13 @@ void RDMAWorker::post_tx_buffer(std::vector &chunks) ldout(cct, 30) << __func__ << " release " << chunks.size() << " chunks, inflight " << stack->get_dispatcher()->inflight << dendl; std::set done; - Mutex::Locker l(lock); while (!pending_sent_conns.empty()) { RDMAConnectedSocketImpl *o = pending_sent_conns.front(); pending_sent_conns.pop_front(); if (!done.count(o)) { - lock.Unlock(); done.insert(o); ssize_t r = o->submit(false); ldout(cct, 20) << __func__ << " sent pending bl socket=" << o << " r=" << r << dendl; - lock.Lock(); if (r < 0) { if (r == -EAGAIN) { pending_sent_conns.push_front(o); diff --git a/src/msg/async/rdma/RDMAStack.h b/src/msg/async/rdma/RDMAStack.h index 322d89d86b79..c92af60746a1 100644 --- a/src/msg/async/rdma/RDMAStack.h +++ b/src/msg/async/rdma/RDMAStack.h @@ -189,7 +189,7 @@ class RDMAWorker : public Worker { int reserve_message_buffer(RDMAConnectedSocketImpl *o, std::vector &c, size_t bytes); void post_tx_buffer(std::vector &chunks); void remove_pending_conn(RDMAConnectedSocketImpl *o) { - Mutex::Locker l(lock); + assert(center.in_thread()); pending_sent_conns.remove(o); } void handle_tx_event();