From b9ffeafbde0620a2730fdee97ba0967fd6ff4cb4 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 11 Dec 2008 11:14:46 -0800 Subject: [PATCH] osd: clear out pg_stat_queue on shutdown --- src/osd/OSD.cc | 6 ++---- src/osd/OSD.h | 6 ++++++ src/osd/PG.cc | 2 ++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 898ae109592e5..6f77fce81244b 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -474,8 +474,6 @@ int OSD::shutdown() wait_for_no_ops(); dout(10) << "no ops" << dendl; - clear_pg_stat_queue(); - // stop threads recovery_tp.stop(); dout(10) << "recovery tp stopped" << dendl; @@ -516,13 +514,13 @@ int OSD::shutdown() dout(10) << "sync done" << dendl; osd_lock.Lock(); + clear_pg_stat_queue(); + // close pgs for (hash_map::iterator p = pg_map.begin(); p != pg_map.end(); p++) { PG *pg = p->second; - pg->lock(); - pg->unlock(); pg->put(); } pg_map.clear(); diff --git a/src/osd/OSD.h b/src/osd/OSD.h index 33c557523fd96..a9eaea905b202 100644 --- a/src/osd/OSD.h +++ b/src/osd/OSD.h @@ -443,6 +443,12 @@ private: osd_stat_updated = true; pg_stat_queue_lock.Unlock(); } + void pg_stat_queue_dequeue(PG *pg) { + pg_stat_queue_lock.Lock(); + if (pg->stat_queue_item.remove_myself()) + pg->put(); + pg_stat_queue_lock.Unlock(); + } void clear_pg_stat_queue() { pg_stat_queue_lock.Lock(); while (!pg_stat_queue.empty()) { diff --git a/src/osd/PG.cc b/src/osd/PG.cc index e92dc2d1b9283..2a7692a792392 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1486,6 +1486,8 @@ void PG::clear_stats() pg_stats_lock.Lock(); pg_stats_valid = false; pg_stats_lock.Unlock(); + + osd->pg_stat_queue_dequeue(this); } -- 2.39.5