From: Sage Weil Date: Thu, 14 Jan 2016 14:18:24 +0000 (-0500) Subject: os/bluestore/FreelistManager: fix _dump locking X-Git-Tag: v10.0.3~43^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e92cbde5300bc8e2feadf96398b79f4621de8741;p=ceph.git os/bluestore/FreelistManager: fix _dump locking Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/FreelistManager.cc b/src/os/bluestore/FreelistManager.cc index eb937a01ac0b..eaf011f59117 100644 --- a/src/os/bluestore/FreelistManager.cc +++ b/src/os/bluestore/FreelistManager.cc @@ -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 diff --git a/src/os/bluestore/FreelistManager.h b/src/os/bluestore/FreelistManager.h index 7993a510e760..a7c1330c3200 100644 --- a/src/os/bluestore/FreelistManager.h +++ b/src/os/bluestore/FreelistManager.h @@ -18,6 +18,7 @@ class FreelistManager { std::map kv_free; ///< mirrors our kv values in the db void _audit(); + void _dump(); public: FreelistManager() :