From 8ff2a31c51dc3259d56764ddae11bf2fcd544d68 Mon Sep 17 00:00:00 2001 From: Zhang Song Date: Fri, 24 May 2024 17:56:48 +0800 Subject: [PATCH] crimson/os/seastore/rbm/avlallocator: return enough regions when request size is greater than max_alloc_size Signed-off-by: Zhang Song --- .../os/seastore/random_block_manager/avlallocator.cc | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/crimson/os/seastore/random_block_manager/avlallocator.cc b/src/crimson/os/seastore/random_block_manager/avlallocator.cc index ab1f0c30e5616..c439424e4fa40 100644 --- a/src/crimson/os/seastore/random_block_manager/avlallocator.cc +++ b/src/crimson/os/seastore/random_block_manager/avlallocator.cc @@ -167,6 +167,7 @@ std::optional> AvlAllocator::alloc_extent( } ceph_assert(size > 0); ceph_assert(is_aligned(size, block_size)); + ceph_assert(size <= max_alloc_size); interval_set result; @@ -183,8 +184,7 @@ std::optional> AvlAllocator::alloc_extent( return 0; }; - auto alloc = std::min(max_alloc_size, size); - rbm_abs_addr ret = try_to_alloc_block(alloc); + rbm_abs_addr ret = try_to_alloc_block(size); if (ret == 0) { return std::nullopt; } @@ -220,7 +220,7 @@ std::optional> AvlAllocator::alloc_extents( { while (alloc_size) { rbm_abs_addr start = 0; - extent_len_t len = find_block(alloc_size, start); + extent_len_t len = find_block(std::min(max_alloc_size, alloc_size), start); ceph_assert(len); _remove_from_tree(start, len); DEBUG("allocate addr: {}, allocate size: {}, available size: {}", @@ -231,8 +231,7 @@ std::optional> AvlAllocator::alloc_extents( return 0; }; - auto alloc = std::min(max_alloc_size, size); - try_to_alloc_block(alloc); + try_to_alloc_block(size); assert(!result.empty()); for (auto p : result) { -- 2.39.5