]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async/rdma: remove lock protection for pending_sent_conns
authorHaomai Wang <haomai@xsky.com>
Mon, 27 Feb 2017 10:24:56 +0000 (18:24 +0800)
committerHaomai Wang <haomai@xsky.com>
Mon, 27 Feb 2017 10:24:56 +0000 (18:24 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/rdma/RDMAStack.cc
src/msg/async/rdma/RDMAStack.h

index 1f0a84ad71a09e430eece03f5ba33bbdaea142a9..ec01760bda247d4188aab6dbf97c59f79b51c840 100644 (file)
@@ -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<Chunk*> &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::vector<C
   assert(r == 0);
 
   if (o) {
-    {
-      Mutex::Locker l(lock);
-      if (pending_sent_conns.back() != o)
-        pending_sent_conns.push_back(o);
-    }
+    if (pending_sent_conns.back() != o)
+      pending_sent_conns.push_back(o);
     dispatcher->pending_buffers(this);
   }
   return r;
@@ -464,6 +462,7 @@ int RDMAWorker::reserve_message_buffer(RDMAConnectedSocketImpl *o, std::vector<C
  */
 void RDMAWorker::post_tx_buffer(std::vector<Chunk*> &chunks)
 {
+  assert(center.in_thread());
   if (chunks.empty())
     return ;
 
@@ -472,16 +471,13 @@ void RDMAWorker::post_tx_buffer(std::vector<Chunk*> &chunks)
   ldout(cct, 30) << __func__ << " release " << chunks.size() << " chunks, inflight " << stack->get_dispatcher()->inflight << dendl;
 
   std::set<RDMAConnectedSocketImpl*> 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);
index 322d89d86b79cdca0e502c9a20345cf4e5639961..c92af60746a13ba42bf550abc9c74877aaf00f35 100644 (file)
@@ -189,7 +189,7 @@ class RDMAWorker : public Worker {
   int reserve_message_buffer(RDMAConnectedSocketImpl *o, std::vector<Chunk*> &c, size_t bytes);
   void post_tx_buffer(std::vector<Chunk*> &chunks);
   void remove_pending_conn(RDMAConnectedSocketImpl *o) {
-    Mutex::Locker l(lock);
+    assert(center.in_thread());
     pending_sent_conns.remove(o);
   }
   void handle_tx_event();