From: Samuel Just Date: Mon, 18 Mar 2013 20:45:40 +0000 (-0700) Subject: ReplicatedPG,OSD: move dequeueing into on_shutdown X-Git-Tag: v0.62~191^2~15 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=264cd3efca1735a56492b275c86378afad6853bf;p=ceph.git ReplicatedPG,OSD: move dequeueing into on_shutdown Signed-off-by: Samuel Just --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 576aeed08e2..ede9636c6ff 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -5733,17 +5733,6 @@ void OSD::_remove_pg(PG *pg) *i, pg->osr, deleting)); } - recovery_wq.dequeue(pg); - scrub_wq.dequeue(pg); - scrub_finalize_wq.dequeue(pg); - snap_trim_wq.dequeue(pg); - pg_stat_queue_dequeue(pg); - op_wq.dequeue(pg); - peering_wq.dequeue(pg); - - pg->deleting = true; - - pg->unreg_next_scrub(); // remove from map pg_map.erase(pg->info.pgid); diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index f87e334f48f..50318fc5869 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -6162,21 +6162,36 @@ void ReplicatedPG::apply_and_flush_repops(bool requeue) void ReplicatedPG::on_removal() { dout(10) << "on_removal" << dendl; - apply_and_flush_repops(false); - context_registry_on_change(); - clear_primary_state(); - osd->remove_want_pg_temp(info.pgid); - cancel_recovery(); - osd->remote_reserver.cancel_reservation(info.pgid); - osd->local_reserver.cancel_reservation(info.pgid); + on_shutdown(); } void ReplicatedPG::on_shutdown() { dout(10) << "on_shutdown" << dendl; + + // remove from queues + osd->recovery_wq.dequeue(this); + osd->scrub_wq.dequeue(this); + osd->scrub_finalize_wq.dequeue(this); + osd->snap_trim_wq.dequeue(this); + osd->pg_stat_queue_dequeue(this); + osd->dequeue_pg(this, 0); + osd->peering_wq.dequeue(this); + + // handles queue races + deleting = true; + + unreg_next_scrub(); apply_and_flush_repops(false); context_registry_on_change(); + + osd->remote_reserver.cancel_reservation(info.pgid); + osd->local_reserver.cancel_reservation(info.pgid); + + clear_primary_state(); + osd->remove_want_pg_temp(info.pgid); + cancel_recovery(); } void ReplicatedPG::on_flushed()