From: Matan Breizman Date: Wed, 22 Jul 2026 08:58:25 +0000 (+0000) Subject: crimson/os/seastore/omap_manager: calculate the overwrite growth (gap) X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9e87510be993b65bb1cae06f6b273c00d5fd8e78;p=ceph.git crimson/os/seastore/omap_manager: calculate the overwrite growth (gap) 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 --- diff --git a/src/crimson/os/seastore/omap_manager/log/log_node.cc b/src/crimson/os/seastore/omap_manager/log/log_node.cc index fdb68aeaccbb..f7571fe75f1c 100644 --- a/src/crimson/os/seastore/omap_manager/log/log_node.cc +++ b/src/crimson/os/seastore/omap_manager/log/log_node.cc @@ -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(gap); - } else { - uint64_t d = static_cast(-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(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) {