From: Igor Fedotov Date: Thu, 29 Apr 2021 18:16:44 +0000 (+0300) Subject: os/bluestore: tolerate zero length for allocators' init_[add/rm]_free() X-Git-Tag: v14.2.22~8^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=e6e4cca9f2e746e13fa75ff1f2a2193e767a3fdb;p=ceph.git os/bluestore: tolerate zero length for allocators' init_[add/rm]_free() Signed-off-by: Igor Fedotov (cherry picked from commit 6548e5d991810e89fc1ac14eb4fcf1a37a2b129f) --- diff --git a/src/os/bluestore/AvlAllocator.cc b/src/os/bluestore/AvlAllocator.cc index fc7f8a47af976..b66ea33fce8e8 100755 --- a/src/os/bluestore/AvlAllocator.cc +++ b/src/os/bluestore/AvlAllocator.cc @@ -416,6 +416,8 @@ void AvlAllocator::dump(std::function no void AvlAllocator::init_add_free(uint64_t offset, uint64_t length) { + if (!length) + return; std::lock_guard l(lock); ldout(cct, 10) << __func__ << std::hex << " offset 0x" << offset @@ -426,6 +428,8 @@ void AvlAllocator::init_add_free(uint64_t offset, uint64_t length) void AvlAllocator::init_rm_free(uint64_t offset, uint64_t length) { + if (!length) + return; std::lock_guard l(lock); ldout(cct, 10) << __func__ << std::hex << " offset 0x" << offset diff --git a/src/os/bluestore/HybridAllocator.cc b/src/os/bluestore/HybridAllocator.cc index 6caf5c6dd8924..3a2da67379b59 100644 --- a/src/os/bluestore/HybridAllocator.cc +++ b/src/os/bluestore/HybridAllocator.cc @@ -155,6 +155,8 @@ void HybridAllocator::dump(std::function void HybridAllocator::init_rm_free(uint64_t offset, uint64_t length) { + if (!length) + return; std::lock_guard l(lock); ldout(cct, 10) << __func__ << std::hex << " offset 0x" << offset diff --git a/src/os/bluestore/StupidAllocator.cc b/src/os/bluestore/StupidAllocator.cc index f75f74468a9ff..b2aca785aa48b 100644 --- a/src/os/bluestore/StupidAllocator.cc +++ b/src/os/bluestore/StupidAllocator.cc @@ -308,6 +308,8 @@ void StupidAllocator::dump(std::function void StupidAllocator::init_add_free(uint64_t offset, uint64_t length) { + if (!length) + return; std::lock_guard l(lock); ldout(cct, 10) << __func__ << " 0x" << std::hex << offset << "~" << length << std::dec << dendl; @@ -317,6 +319,8 @@ void StupidAllocator::init_add_free(uint64_t offset, uint64_t length) void StupidAllocator::init_rm_free(uint64_t offset, uint64_t length) { + if (!length) + return; std::lock_guard l(lock); ldout(cct, 10) << __func__ << " 0x" << std::hex << offset << "~" << length << std::dec << dendl; diff --git a/src/test/objectstore/Allocator_test.cc b/src/test/objectstore/Allocator_test.cc index 50512814f3b5f..ca6a539c9d64f 100644 --- a/src/test/objectstore/Allocator_test.cc +++ b/src/test/objectstore/Allocator_test.cc @@ -50,6 +50,23 @@ TEST_P(AllocTest, test_alloc_init) ASSERT_EQ(alloc->get_free(), (uint64_t) 0); } +TEST_P(AllocTest, test_init_add_free) +{ + int64_t block_size = 1024; + int64_t capacity = 4 * 1024 * block_size; + + { + init_alloc(capacity, block_size); + + auto free = alloc->get_free(); + alloc->init_add_free(block_size, 0); + ASSERT_EQ(free, alloc->get_free()); + + alloc->init_rm_free(block_size, 0); + ASSERT_EQ(free, alloc->get_free()); + } +} + TEST_P(AllocTest, test_alloc_min_alloc) { int64_t block_size = 1024;