]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/omap_manager: calculate the overwrite growth (gap)
authorMatan Breizman <mbreizma@redhat.com>
Wed, 22 Jul 2026 08:58:25 +0000 (08:58 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Thu, 23 Jul 2026 12:12:53 +0000 (12:12 +0000)
The previous implementation computed ow_gap_from_last_entry() but never used
the result.
Use it to check only the additional space required when the tail
entry grows, which matches overwrite logic.

Note, this is a cleanup - behavior remains similar.

See 825c8f149cbaac97944235d5d006c59d0b0a0fc1

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/crimson/os/seastore/omap_manager/log/log_node.cc

index fdb68aeaccbb58f967bb9ef9adfe0c096da6b216..f7571fe75f1c0e015ae181e50f4de4af89aa72c1 100644 (file)
@@ -323,15 +323,10 @@ bool LogNode::expect_overflow(const std::string &key,
   size_t vsize, bool can_ow) {
   size_t ksize = key.size();
   if (can_ow) { 
-    int gap = ow_gap_from_last_entry(key.size(), vsize);
-    if (gap >= 0) {
-      gap += static_cast<uint64_t>(gap);
-    } else {
-      uint64_t d = static_cast<uint64_t>(-gap);
-      gap -= d;
-    }
-    return get_last_pos() + reserved_len + get_entry_size(ksize, vsize)
-           > capacity();
+    // Reserve only the additional space required by the overwrite.
+    int gap = ow_gap_from_last_entry(ksize, vsize);
+    return gap > 0 &&
+      free_space() < static_cast<size_t>(gap) + reserved_len;
   } else if (get_size() + reserved_size + 1 > d_bitmap_t::MAX_ENTRY) {
     return true;
   } else if (is_ow_key(key) && !can_ow) {