From 71e094faba8afb47be6b9e93507a6cc93ce87055 Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Mon, 10 Mar 2025 08:53:09 +0000 Subject: [PATCH] os/bluestore: Improve bluestore_blob_t::add_tail It could happen that target blob already had empty mapping at the end. In such case, do not add more empty mappings, just expand exising one. Signed-off-by: Adam Kupczyk --- src/os/bluestore/bluestore_types.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/os/bluestore/bluestore_types.h b/src/os/bluestore/bluestore_types.h index f45224769b223..a7dc6cc52f4af 100644 --- a/src/os/bluestore/bluestore_types.h +++ b/src/os/bluestore/bluestore_types.h @@ -1004,10 +1004,14 @@ public: void add_tail(uint32_t new_len) { ceph_assert(!has_unused()); ceph_assert(new_len > logical_length); - extents.emplace_back( - bluestore_pextent_t( - bluestore_pextent_t::INVALID_OFFSET, - new_len - logical_length)); + if (extents.size() == 0 || extents.back().is_valid()) { + extents.emplace_back( + bluestore_pextent_t( + bluestore_pextent_t::INVALID_OFFSET, + new_len - logical_length)); + } else { + extents.back().length += new_len - logical_length; + } logical_length = new_len; if (has_csum()) { ceph::buffer::ptr t; -- 2.39.5