Skip to content

Commit

Permalink
osd/OSDMap: potential access violation fix
Browse files Browse the repository at this point in the history
Seems we'll continue to access the iterator after it is invalidated
by the __erase__ method.
Also this is more efficient considering there could be some extreme
ec-pool (e.g., 8 + 2) consumers..

Fixes: http://tracker.ceph.com/issues/37881
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
(cherry picked from commit df2e01f)
  • Loading branch information
xiexingguo committed Jan 25, 2019
1 parent 8b3114e commit 1763a87
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions src/osd/OSDMap.cc
Expand Up @@ -4044,17 +4044,17 @@ int OSDMap::calc_pg_upmaps(

map<int,float> pmap;
int ruleno = tmp.crush->find_rule(i.second.get_crush_rule(),
i.second.get_type(),
i.second.get_size());
i.second.get_type(),
i.second.get_size());
tmp.crush->get_rule_weight_osd_map(ruleno, &pmap);
ldout(cct,30) << __func__ << " pool " << i.first << " ruleno " << ruleno << dendl;
for (auto p : pmap) {
auto adjusted_weight = tmp.get_weightf(p.first) * p.second;
auto adjusted_weight = tmp.get_weightf(p.first) * p.second;
if (adjusted_weight == 0) {
continue;
}
osd_weight[p.first] += adjusted_weight;
osd_weight_total += adjusted_weight;
osd_weight[p.first] += adjusted_weight;
osd_weight_total += adjusted_weight;
}
}
for (auto& i : osd_weight) {
Expand Down Expand Up @@ -4155,6 +4155,7 @@ int OSDMap::calc_pg_upmaps(
pending_inc->old_pg_upmap_items.insert(pg);
++num_changed;
restart = true;
break;
}
}
}
Expand Down

0 comments on commit 1763a87

Please sign in to comment.