]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msg/async/rdma: add atomic and lock protection 16981/head
authorHaomai Wang <haomai@xsky.com>
Fri, 11 Aug 2017 02:02:45 +0000 (10:02 +0800)
committerHaomai Wang <haomai@xsky.com>
Fri, 11 Aug 2017 02:11:33 +0000 (10:11 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/msg/async/rdma/Infiniband.cc
src/msg/async/rdma/Infiniband.h
src/msg/async/rdma/RDMAStack.cc

index 5173feb94340b045c0492fa9efaf36dc28d9233a..a6842f0bf68014bc9cd673c92ec47c16e40cde95 100644 (file)
@@ -778,7 +778,7 @@ int Infiniband::MemoryManager::get_send_buffers(std::vector<Chunk*> &c, size_t b
   return send->get_buffers(c, bytes);
 }
 
-bool Infiniband::init_prereq = false;
+static std::atomic<bool> init_prereq = {false};
 
 void Infiniband::verify_prereq(CephContext *cct) {
 
@@ -792,7 +792,7 @@ void Infiniband::verify_prereq(CephContext *cct) {
    ldout(cct, 20) << __func__ << " ms_async_rdma_enable_hugepage value is: " << cct->_conf->ms_async_rdma_enable_hugepage <<  dendl;
    if (cct->_conf->ms_async_rdma_enable_hugepage){
      rc =  setenv("RDMAV_HUGEPAGES_SAFE","1",1);
-     ldout(cct, 20) << __func__ << " RDMAV_HUGEPAGES_SAFE is set as: " << getenv("RDMAV_HUGEPAGES_SAFE") <<  dendl;
+     ldout(cct, 0) << __func__ << " RDMAV_HUGEPAGES_SAFE is set as: " << getenv("RDMAV_HUGEPAGES_SAFE") <<  dendl;
      if (rc) {
        lderr(cct) << __func__ << " failed to export RDMA_HUGEPAGES_SAFE. On RDMA must be exported before using huge pages. Application aborts." << dendl;
        ceph_abort();
index 67b3b9b457a2595334c93cf3d6349975536787be..d9b196ba5570e317ed56a04fb5d11e3468c4bd2a 100644 (file)
@@ -328,7 +328,6 @@ class Infiniband {
   bool initialized = false;
   const std::string &device_name;
   uint8_t port_num;
-  static bool init_prereq;
 
  public:
   explicit Infiniband(CephContext *c);
index a477cf531a02ee52dff18a15a81b2941930b4615..1b7a32a3f3cc486c9be6a317e6d049443ccbb630 100644 (file)
@@ -95,6 +95,7 @@ void RDMADispatcher::polling_start()
 
 void RDMADispatcher::polling_stop()
 {
+  Mutex::Locker l(lock);
   done = true;
   if (!t.joinable())
     return;