From: Sage Weil Date: Thu, 10 Dec 2015 21:08:32 +0000 (-0500) Subject: os/bluestore/Allocator: init_rm_free X-Git-Tag: v10.0.3~154^2~177 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=08a94d95e130dd75ca4b31e7b496d1d708c7efaa;p=ceph.git os/bluestore/Allocator: init_rm_free Signed-off-by: Sage Weil --- diff --git a/src/os/bluestore/Allocator.h b/src/os/bluestore/Allocator.h index 5c120a2f6a9f..fea26ab8a5aa 100644 --- a/src/os/bluestore/Allocator.h +++ b/src/os/bluestore/Allocator.h @@ -13,8 +13,8 @@ #define CEPH_OS_NEWSTORE_ALLOCATOR_H #include "kv/KeyValueDB.h" - #include +#include "include/assert.h" class FreelistManager; @@ -37,6 +37,9 @@ public: virtual void dump(std::ostream& out) = 0; virtual void init_add_free(uint64_t offset, uint64_t length) = 0; + virtual void init_rm_free(uint64_t offset, uint64_t length) = 0; + + virtual uint64_t get_free() = 0; virtual void shutdown() = 0; diff --git a/src/os/bluestore/StupidAllocator.cc b/src/os/bluestore/StupidAllocator.cc index 2727f8c8a440..6f29d3ce9cda 100644 --- a/src/os/bluestore/StupidAllocator.cc +++ b/src/os/bluestore/StupidAllocator.cc @@ -164,6 +164,12 @@ int StupidAllocator::release( return 0; } +uint64_t StupidAllocator::get_free() +{ + Mutex::Locker l(lock); + return num_free; +} + void StupidAllocator::dump(ostream& out) { Mutex::Locker l(lock); @@ -199,6 +205,24 @@ void StupidAllocator::init_add_free(uint64_t offset, uint64_t length) num_free += length; } +void StupidAllocator::init_rm_free(uint64_t offset, uint64_t length) +{ + dout(10) << __func__ << " " << offset << "~" << length << dendl; + interval_set rm; + for (unsigned i = 0; i < free.size() && !rm.empty(); ++i) { + interval_set overlap; + overlap.intersection_of(rm, free[i]); + if (!overlap.empty()) { + dout(20) << __func__ << " bin " << i << " rm " << overlap << dendl; + free[i].subtract(overlap); + rm.subtract(overlap); + } + } + assert(rm.empty()); + num_free -= length; +} + + void StupidAllocator::shutdown() { dout(1) << __func__ << dendl; diff --git a/src/os/bluestore/StupidAllocator.h b/src/os/bluestore/StupidAllocator.h index ffaec2aebef3..b37c03507c78 100644 --- a/src/os/bluestore/StupidAllocator.h +++ b/src/os/bluestore/StupidAllocator.h @@ -41,9 +41,13 @@ public: void commit_start(); void commit_finish(); + uint64_t get_free(); + void dump(ostream& out); void init_add_free(uint64_t offset, uint64_t length); + void init_rm_free(uint64_t offset, uint64_t length); + void shutdown(); };