diff options
author | Samuel Just <sam.just@inktank.com> | 2013-04-18 17:40:12 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-04-19 11:00:21 -0700 |
commit | 0b7795acda5bd5dc0328705cb50694ae9f8c223b (patch) | |
tree | bc8e038ec050ea11e10b878e421639a2c38b4eff | |
parent | f45a541365f1c77e9e1ffa410e44d342b0cb9975 (diff) | |
download | ceph-0b7795acda5bd5dc0328705cb50694ae9f8c223b.tar.gz |
OSD: use PGRef in consume_map
Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r-- | src/osd/OSD.cc | 12 |
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(); |