]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: tolerate zero length for allocators' init_[add/rm]_free() 41750/head
authorIgor Fedotov <ifedotov@suse.com>
Thu, 29 Apr 2021 18:16:44 +0000 (21:16 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Tue, 8 Jun 2021 09:34:48 +0000 (12:34 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
(cherry picked from commit 6548e5d991810e89fc1ac14eb4fcf1a37a2b129f)

src/os/bluestore/AvlAllocator.cc
src/os/bluestore/HybridAllocator.cc
src/os/bluestore/StupidAllocator.cc
src/test/objectstore/Allocator_test.cc

index fc7f8a47af976fa0bb8e8eeebdd1080ddf6761bc..b66ea33fce8e873597fadac416656e83be1a7e7c 100755 (executable)
@@ -416,6 +416,8 @@ void AvlAllocator::dump(std::function<void(uint64_t offset, uint64_t length)> 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
index 6caf5c6dd8924be68db1301ddb180e84d9a35299..3a2da67379b592eda2b8312b741102ff8bf149c7 100644 (file)
@@ -155,6 +155,8 @@ void HybridAllocator::dump(std::function<void(uint64_t offset, uint64_t length)>
 
 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
index f75f74468a9ffd6d701446681ac7a579fbcd4acd..b2aca785aa48b7dbab00ef65e8a19231b3ebdf70 100644 (file)
@@ -308,6 +308,8 @@ void StupidAllocator::dump(std::function<void(uint64_t offset, uint64_t length)>
 
 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;
index 50512814f3b5f8e4e9b1601c96587d78493c7886..ca6a539c9d64f7e084315d9f5acbde0136116973 100644 (file)
@@ -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;