From e92cbde5300bc8e2feadf96398b79f4621de8741 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 14 Jan 2016 09:18:24 -0500 Subject: [PATCH] os/bluestore/FreelistManager: fix _dump locking Signed-off-by: Sage Weil --- src/os/bluestore/FreelistManager.cc | 11 ++++++++--- src/os/bluestore/FreelistManager.h | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) 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() : -- 2.47.3