From c4ca1142cd6a46b68f0b0f3b708274ffbf046c02 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 2 Feb 2012 10:31:17 -0800 Subject: [PATCH] osd: fix osd_recover_clone_overlap - we need to populate data_subset - add check in calc_head_subsets() too Fixes 2116f012. Signed-off-by: Sage Weil --- src/osd/ReplicatedPG.cc | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index bcef42d0683f1..67ea4d04d941a 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -3774,6 +3774,11 @@ void ReplicatedPG::calc_head_subsets(ObjectContext *obc, SnapSet& snapset, const if (size) data_subset.insert(0, size); + if (!g_conf->osd_recover_clone_overlap) { + dout(10) << "calc_head_subsets " << head << " -- osd_recover_clone_overlap disabled" << dendl; + return; + } + interval_set cloning; interval_set prev; @@ -3809,16 +3814,18 @@ void ReplicatedPG::calc_clone_subsets(SnapSet& snapset, const hobject_t& soid, interval_set& data_subset, map >& clone_subsets) { - if (!g_conf->osd_recover_clone_overlap) { - dout(10) << "calc_clone_subsets " << soid << " -- osd_recover_clone_overlap disabled" << dendl; - return; - } - dout(10) << "calc_clone_subsets " << soid << " clone_overlap " << snapset.clone_overlap << dendl; uint64_t size = snapset.clone_size[soid.snap]; + if (size) + data_subset.insert(0, size); + if (!g_conf->osd_recover_clone_overlap) { + dout(10) << "calc_clone_subsets " << soid << " -- osd_recover_clone_overlap disabled" << dendl; + return; + } + unsigned i; for (i=0; i < snapset.clones.size(); i++) if (snapset.clones[i] == soid.snap) @@ -3864,8 +3871,6 @@ void ReplicatedPG::calc_clone_subsets(SnapSet& snapset, const hobject_t& soid, } // what's left for us to push? - if (size) - data_subset.insert(0, size); data_subset.subtract(cloning); dout(10) << "calc_clone_subsets " << soid -- 2.39.5