From: Radoslaw Zarzynski Date: Sun, 10 Sep 2017 11:58:02 +0000 (+0200) Subject: os/bluestore: make the BitMapAllocator aware about bulk releases. X-Git-Tag: v13.0.1~711^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d11753ef4d03fabcf326a26fd68febdafdbd58ab;p=ceph.git os/bluestore: make the BitMapAllocator aware about bulk releases. Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/os/bluestore/Allocator.h b/src/os/bluestore/Allocator.h index 62850c4fa602..c32b33c0c17e 100644 --- a/src/os/bluestore/Allocator.h +++ b/src/os/bluestore/Allocator.h @@ -48,15 +48,7 @@ public: /* Bulk release. Implementations may override this method to handle the whole * set at once. This could save e.g. unnecessary mutex dance. */ - virtual void release(const interval_set& release_set) { - /* TODO(rzarzynski): make this pure virtual and eradicate the single-op - * release() after switching all allocators. */ - for (interval_set::const_iterator p = release_set.begin(); - p != release_set.end(); - ++p) { - release(p.get_start(), p.get_len()); - } - } + virtual void release(const interval_set& release_set) = 0; virtual void dump() = 0; diff --git a/src/os/bluestore/BitMapAllocator.cc b/src/os/bluestore/BitMapAllocator.cc index f2a16d8c9004..d63804a56fd4 100644 --- a/src/os/bluestore/BitMapAllocator.cc +++ b/src/os/bluestore/BitMapAllocator.cc @@ -154,6 +154,21 @@ void BitMapAllocator::release( insert_free(offset, length); } +void BitMapAllocator::release( + const interval_set& release_set) +{ + for (interval_set::const_iterator p = release_set.begin(); + p != release_set.end(); + ++p) { + const auto offset = p.get_start(); + const auto length = p.get_len(); + dout(10) << __func__ << " 0x" + << std::hex << offset << "~" << length << std::dec + << dendl; + insert_free(offset, length); + } +} + uint64_t BitMapAllocator::get_free() { assert(m_bit_alloc->total_blocks() >= m_bit_alloc->get_used_blocks()); diff --git a/src/os/bluestore/BitMapAllocator.h b/src/os/bluestore/BitMapAllocator.h index a39751d4cf6a..36483705db0c 100644 --- a/src/os/bluestore/BitMapAllocator.h +++ b/src/os/bluestore/BitMapAllocator.h @@ -37,6 +37,8 @@ public: void release( uint64_t offset, uint64_t length) override; + void release( + const interval_set& release_set) override; uint64_t get_free() override;