From: Zhang Song Date: Fri, 24 May 2024 09:56:48 +0000 (+0800) Subject: crimson/os/seastore/rbm/avlallocator: return enough regions when request size is... X-Git-Tag: v19.1.1~247^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=958aa742d72cabfe30104285df0790db28fce152;p=ceph.git crimson/os/seastore/rbm/avlallocator: return enough regions when request size is greater than max_alloc_size Signed-off-by: Zhang Song (cherry picked from commit 8ff2a31c51dc3259d56764ddae11bf2fcd544d68) --- 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) {