]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/FreelistManager: fix _dump locking 7196/head
authorSage Weil <sage@redhat.com>
Thu, 14 Jan 2016 14:18:24 +0000 (09:18 -0500)
committerSage Weil <sage@redhat.com>
Thu, 14 Jan 2016 14:18:24 +0000 (09:18 -0500)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/FreelistManager.cc
src/os/bluestore/FreelistManager.h

index eb937a01ac0b03f80221b4883c615d6425648738..eaf011f59117dc3507be6aa8c3200aaf25d6254f 100644 (file)
@@ -78,6 +78,11 @@ void FreelistManager::shutdown()
 void FreelistManager::dump()
 {
   Mutex::Locker l(lock);
+  _dump();
+}
+
+void FreelistManager::_dump()
+{
   dout(30) << __func__ << " " << total_free
           << " in " << kv_free.size() << " extents" << dendl;
   for (auto p = kv_free.begin();
@@ -121,7 +126,7 @@ int FreelistManager::allocate(
     if (p != kv_free.end()) {
       derr << " existing extent " << p->first << "~" << p->second << dendl;
     }
-    dump();
+    _dump();
     assert(0 == "bad allocate");
   }
 
@@ -199,7 +204,7 @@ int FreelistManager::release(
     } else if (p->first + p->second > offset) {
       derr << __func__ << " bad release " << offset << "~" << length
           << " overlaps with " << p->first << "~" << p->second << dendl;
-      dump();
+      _dump();
       assert(0 == "bad release overlap");
     } else {
       dout(30) << __func__ << " previous extent " << p->first << "~" << p->second
@@ -221,7 +226,7 @@ int FreelistManager::release(
     } else if (p->first < offset + length) {
       derr << __func__ << " bad release " << offset << "~" << length
           << " overlaps with " << p->first << "~" << p->second << dendl;
-      dump();
+      _dump();
       assert(0 == "bad release overlap");
     } else {
       dout(30) << __func__ << " next extent " << p->first << "~" << p->second
index 7993a510e76050836f6c0f7e1ea424b2281b5ef6..a7c1330c32005fa4da205098e13a1a4a2c149a10 100644 (file)
@@ -18,6 +18,7 @@ class FreelistManager {
   std::map<uint64_t, uint64_t> kv_free;    ///< mirrors our kv values in the db
 
   void _audit();
+  void _dump();
 
 public:
   FreelistManager() :