From: Igor Fedotov Date: Fri, 11 May 2018 21:26:49 +0000 (+0300) Subject: os/bluestore: align BitMap allocator's init_rm_free/init_add_free parameters with... X-Git-Tag: v12.2.12~16^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bc99521aec1fb6d3b9ef7f56cb4aaeff8ff9a266;p=ceph.git os/bluestore: align BitMap allocator's init_rm_free/init_add_free parameters with min_alloc_size Signed-off-by: Igor Fedotov (cherry picked from commit 1b6a56e80066decf8c3727090a2cd51ba9ded9bc) --- diff --git a/src/os/bluestore/BitmapFastAllocator.cc b/src/os/bluestore/BitmapFastAllocator.cc index 2733ccd060d4..35c752708fa3 100755 --- a/src/os/bluestore/BitmapFastAllocator.cc +++ b/src/os/bluestore/BitmapFastAllocator.cc @@ -53,13 +53,21 @@ void BitmapFastAllocator::init_add_free(uint64_t offset, uint64_t length) { ldout(cct, 10) << __func__ << " 0x" << std::hex << offset << "~" << length << std::dec << dendl; - _mark_free(offset, length); + + auto mas = get_min_alloc_size(); + uint64_t offs = ROUND_UP_TO(offset, mas); + uint64_t l = P2ALIGN(offset + length - offs, mas); + + _mark_free(offs, l); } void BitmapFastAllocator::init_rm_free(uint64_t offset, uint64_t length) { ldout(cct, 10) << __func__ << " 0x" << std::hex << offset << "~" << length << std::dec << dendl; - _mark_allocated(offset, length); + auto mas = get_min_alloc_size(); + uint64_t offs = ROUND_UP_TO(offset, mas); + uint64_t l = P2ALIGN(offset + length - offs, mas); + _mark_allocated(offs, l); } void BitmapFastAllocator::shutdown() diff --git a/src/os/bluestore/fastbmap_allocator_impl.h b/src/os/bluestore/fastbmap_allocator_impl.h index 72a4f16b8116..2611826c7a7f 100755 --- a/src/os/bluestore/fastbmap_allocator_impl.h +++ b/src/os/bluestore/fastbmap_allocator_impl.h @@ -104,6 +104,12 @@ protected: inline bool _is_slot_fully_allocated(uint64_t idx) const { return l1[idx] == all_slot_clear; } +public: + inline uint64_t get_min_alloc_size() const + { + return l0_granularity; + } + }; template @@ -538,6 +544,10 @@ public: std::lock_guard l(lock); return available; } + inline uint64_t get_min_alloc_size() const + { + return l1.get_min_alloc_size(); + } protected: std::mutex lock;