From: Adam Kupczyk Date: Mon, 10 Mar 2025 08:53:09 +0000 (+0000) Subject: os/bluestore: Improve bluestore_blob_t::add_tail X-Git-Tag: v20.3.0~346^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=71e094faba8afb47be6b9e93507a6cc93ce87055;p=ceph.git 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 --- diff --git a/src/os/bluestore/bluestore_types.h b/src/os/bluestore/bluestore_types.h index f45224769b22..a7dc6cc52f4a 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;