From 3b4cec7ec6259b3899a6a9ed2539b673c7bb59e5 Mon Sep 17 00:00:00 2001 From: xie xingguo Date: Thu, 26 Oct 2017 11:04:33 +0800 Subject: [PATCH] osd/PrimaryLogPG: make oi.extents handle 0-length write/write_full properly Signed-off-by: xie xingguo --- src/osd/PrimaryLogPG.cc | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 8b9beedba7b..d7f37292d86 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -7205,17 +7205,21 @@ void PrimaryLogPG::write_update_size_and_usage(object_stat_sum_t& delta_stats, o } oi.size = new_size; } - if (length && oi.has_extents()) { - delta_stats.num_bytes -= oi.extents.size(); - if (write_full) { - // oi.size may shrink - oi.extents.clear(); - assert(offset == 0); - oi.extents.insert(0, length); - } else { - oi.extents.union_of(ch); // deduplicated - } - delta_stats.num_bytes += oi.extents.size(); + if (oi.has_extents()) { + delta_stats.num_bytes -= oi.extents.size(); + if (write_full) { + // oi.size may shrink + oi.extents.clear(); + assert(offset == 0); + if (length) { + oi.extents.insert(0, length); + } + } else { + if (length) { + oi.extents.union_of(ch); // deduplicated + } + } + delta_stats.num_bytes += oi.extents.size(); } delta_stats.num_wr++; delta_stats.num_wr_kb += SHIFT_ROUND_UP(length, 10); -- 2.39.5