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: v13.2.6~102^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d42bb17f4f85fc2b265bb77c81e1fc0604ef96ac;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..9c5339d44901 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 fe8e94e33b74..271d628cf9ee 100755 --- a/src/os/bluestore/fastbmap_allocator_impl.h +++ b/src/os/bluestore/fastbmap_allocator_impl.h @@ -103,6 +103,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 @@ -537,6 +543,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;