From: Yang Honggang Date: Thu, 20 Jul 2017 06:01:16 +0000 (+0800) Subject: osd: fix pg ref leaks when osd shutdown X-Git-Tag: v12.1.2~181^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=671fdb8c96ed416cd7001d95ec78a6a851ddae97;p=ceph.git osd: fix pg ref leaks when osd shutdown Fixes: http://tracker.ceph.com/issues/20684 Signed-off-by: Yang Honggang --- 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;