Hi, grep:-) I finally got what you mean in https://github.com/ceph/ceph/pull/16790. I agree with you in that " clone overlap is supposed to be tracking which data is the same on disk". My thought is that, "ObjectContext::new_snapset.clones" is already an indicator about whether there are clone objects on disk, so, in the scenario of "cache tier", although a clone oid does not corresponds to a "present clone" in cache tier, as long as "ObjectContext::new_snapset.clones" is not empty, there must a one such clone object in the base tier. And, as long as "ObjectContext::new_snapset.clones" has a strict "one-to-one" correspondence to "ObjectContext::new_snapset.clone_overlap", passing the condition check "if (ctx->new_snapset.clones.size() > 0)" is enough to make the judgement that the clone object exists. So, if I'm right, passing the condition check "if (ctx->new_snapset.clones.size() > 0)" is already enough for us to do "newest_overlap.subtract(ctx->modified_ranges)", it doesn't have to pass "is_present_clone". Am I right about this? Or am I missing anything? Please help us, thank you:-) -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html