From: myoungwon oh Date: Thu, 10 Jun 2021 07:09:06 +0000 (+0900) Subject: seastore/rbm: fix wrong statement X-Git-Tag: v17.1.0~1638^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a8001931b27557b2918f83334ffc5f62b4d287c6;p=ceph.git seastore/rbm: fix wrong statement Signed-off-by: Myoungwon Oh --- diff --git a/src/crimson/os/seastore/randomblock_manager.cc b/src/crimson/os/seastore/randomblock_manager.cc index 1ccaa19024ff..b2aec77bd3e6 100644 --- a/src/crimson/os/seastore/randomblock_manager.cc +++ b/src/crimson/os/seastore/randomblock_manager.cc @@ -434,11 +434,7 @@ RandomBlockManager::write_ertr::future<> RandomBlockManager::complete_allocation } } logger().debug("complete_alloction: complete to allocate {} blocks", alloc_block_count); - if (alloc_block_count > 0) { - super.free_block_count -= alloc_block_count; - } else { - super.free_block_count += alloc_block_count; - } + super.free_block_count -= alloc_block_count; return write_ertr::now(); }); }); diff --git a/src/test/crimson/seastore/test_randomblock_manager.cc b/src/test/crimson/seastore/test_randomblock_manager.cc index 43ad88ef3a35..66339d22e3ae 100644 --- a/src/test/crimson/seastore/test_randomblock_manager.cc +++ b/src/test/crimson/seastore/test_randomblock_manager.cc @@ -331,5 +331,20 @@ TEST_F(rbm_test_t, check_free_blocks) rbm_manager->rbm_sync_block_bitmap_by_range(10, 12, bitmap_op_types_t::ALL_SET).unsafe_get0(); rbm_manager->check_bitmap_blocks().unsafe_get0(); ASSERT_TRUE(rbm_manager->get_free_blocks() == DEFAULT_TEST_SIZE/DEFAULT_BLOCK_SIZE - 5); + auto free = rbm_manager->get_free_blocks(); + interval_set alloc_ids; + auto t = tm->create_transaction(); + alloc_extent(*t, DEFAULT_BLOCK_SIZE * 4); + alloc_ids = get_allocated_blk_ids(*t); + ASSERT_TRUE(submit_transaction(*t)); + complete_allocation(*t); + ASSERT_TRUE(rbm_manager->get_free_blocks() == free - 4); + + free = rbm_manager->get_free_blocks(); + auto t2 = tm->create_transaction(); + free_extent(*t2, alloc_ids); + ASSERT_TRUE(submit_transaction(*t2)); + complete_allocation(*t2); + ASSERT_TRUE(rbm_manager->get_free_blocks() == free + 4); }); }