From 671fdb8c96ed416cd7001d95ec78a6a851ddae97 Mon Sep 17 00:00:00 2001 From: Yang Honggang Date: Thu, 20 Jul 2017 14:01:16 +0800 Subject: [PATCH] osd: fix pg ref leaks when osd shutdown Fixes: http://tracker.ceph.com/issues/20684 Signed-off-by: Yang Honggang --- src/osd/PrimaryLogPG.cc | 14 ++++++++++++++ src/osd/PrimaryLogPG.h | 1 + 2 files changed, 15 insertions(+) diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index 33ef908f6920..26d7808b64ef 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -10651,6 +10651,18 @@ void PrimaryLogPG::on_removal(ObjectStore::Transaction *t) on_shutdown(); } +void PrimaryLogPG::clear_async_reads() +{ + dout(10) << __func__ << dendl; + for(auto& i : in_progress_async_reads) { + dout(10) << "clear ctx: " + << "OpRequestRef " << i.first + << " OpContext " << i.second + << dendl; + close_op_ctx(i.second); + } +} + void PrimaryLogPG::on_shutdown() { dout(10) << "on_shutdown" << dendl; @@ -10686,6 +10698,8 @@ void PrimaryLogPG::on_shutdown() context_registry_on_change(); object_contexts.clear(); + clear_async_reads(); + osd->remote_reserver.cancel_reservation(info.pgid); osd->local_reserver.cancel_reservation(info.pgid); diff --git a/src/osd/PrimaryLogPG.h b/src/osd/PrimaryLogPG.h index a8f7db5df427..43b88f9883b4 100644 --- a/src/osd/PrimaryLogPG.h +++ b/src/osd/PrimaryLogPG.h @@ -1762,6 +1762,7 @@ public: void on_role_change() override; void on_pool_change() override; void _on_new_interval() override; + void clear_async_reads(); void on_change(ObjectStore::Transaction *t) override; void on_activate() override; void on_flushed() override; -- 2.47.3