There might be holes in the extents map, thus it is not always
consistent to calc the clone bytes this way.
Instead we could switch to its own (simpler and consistent) way to
count used bytes for head-object and clone respectively.
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
assert(!oi.soid.is_snapdir());
object_stat_sum_t stat;
- stat.num_bytes += oi.has_extents() ?
- oi.extents.size() : oi.size;
stat.num_objects++;
if (oi.is_dirty())
stat.num_objects_dirty++;
if (!obc->ssc)
obc->ssc = get_snapset_context(oi.soid, false);
assert(obc->ssc);
-
- // subtract off clone overlap
- auto it = obc->ssc->snapset.clone_overlap.find(oi.soid.snap);
- if (it != obc->ssc->snapset.clone_overlap.end()) {
- stat.num_bytes -= it->second.size();
- }
+ stat.num_bytes += obc->ssc->snapset.get_clone_bytes(oi.soid.snap);
+ } else {
+ stat.num_bytes += oi.has_extents() ?
+ oi.extents.size() : oi.size;
}
// add it in