summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-04-18 17:40:12 -0700
committerSamuel Just <sam.just@inktank.com>2013-04-19 11:00:21 -0700
commit0b7795acda5bd5dc0328705cb50694ae9f8c223b (patch)
treebc8e038ec050ea11e10b878e421639a2c38b4eff
parentf45a541365f1c77e9e1ffa410e44d342b0cb9975 (diff)
downloadceph-0b7795acda5bd5dc0328705cb50694ae9f8c223b.tar.gz
OSD: use PGRef in consume_map
Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r--src/osd/OSD.cc12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index ba502e6112d..1039d57ab2b 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -4455,7 +4455,7 @@ void OSD::consume_map()
dout(7) << "consume_map version " << osdmap->get_epoch() << dendl;
int num_pg_primary = 0, num_pg_replica = 0, num_pg_stray = 0;
- list<PG*> to_remove;
+ list<PGRef> to_remove;
// scan pg's
for (hash_map<pg_t,PG*>::iterator it = pg_map.begin();
@@ -4473,8 +4473,7 @@ void OSD::consume_map()
set<pg_t> split_pgs;
if (!osdmap->have_pg_pool(pg->info.pgid.pool())) {
//pool is deleted!
- pg->get();
- to_remove.push_back(pg);
+ to_remove.push_back(PGRef(pg));
} else if (it->first.is_split(
service.get_osdmap()->get_pg_num(it->first.pool()),
osdmap->get_pg_num(it->first.pool()),
@@ -4485,13 +4484,12 @@ void OSD::consume_map()
pg->unlock();
}
- for (list<PG*>::iterator i = to_remove.begin();
+ for (list<PGRef>::iterator i = to_remove.begin();
i != to_remove.end();
- ++i) {
+ to_remove.erase(i++)) {
(*i)->lock();
- _remove_pg((*i));
+ _remove_pg(&**i);
(*i)->unlock();
- (*i)->put();
}
to_remove.clear();