]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: Improve bluestore_blob_t::add_tail 61990/head
authorAdam Kupczyk <akupczyk@ibm.com>
Mon, 10 Mar 2025 08:53:09 +0000 (08:53 +0000)
committerAdam Kupczyk <akupczyk@ibm.com>
Thu, 13 Mar 2025 06:52:03 +0000 (06:52 +0000)
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 <akupczyk@ibm.com>
src/os/bluestore/bluestore_types.h

index f45224769b22395723b46514849b3a13dd5f0e72..a7dc6cc52f4af890ba92b0551eef096ad0da42a2 100644 (file)
@@ -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;