From 264cd3efca1735a56492b275c86378afad6853bf Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Mon, 18 Mar 2013 13:45:40 -0700 Subject: [PATCH] ReplicatedPG,OSD: move dequeueing into on_shutdown Signed-off-by: Samuel Just --- src/osd/OSD.cc | 11 ----------- src/osd/ReplicatedPG.cc | 29 ++++++++++++++++++++++------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 576aeed08e290..ede9636c6ff50 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 f87e334f48f39..50318fc5869de 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() -- 2.39.5