]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: tolerate zero length for allocators' init_[add/rm]_free() 41753/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 10:34:34 +0000 (13: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 b9f5e56ffcc62477630c8581580a353d8ebfc0c7..806545bf08f67dd9b62f7df5f6dcaced9d22c159 100644 (file)
@@ -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 533f279d7801d65a47080650fd19999da16c9231..bdebe10a5cb764a29526d95f24f32daaddb52afe 100644 (file)
@@ -311,6 +311,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;
@@ -320,6 +322,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 29ceb3cf104cde2564e4da9a18af941b5795e781..0b417ae18640b969512c05c400ea7e42558bbbd8 100644 (file)
@@ -47,6 +47,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;