]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix pg ref leaks when osd shutdown 16408/head
authorYang Honggang <joseph.yang@xtaotech.com>
Thu, 20 Jul 2017 06:01:16 +0000 (14:01 +0800)
committerYang Honggang <joseph.yang@xtaotech.com>
Thu, 20 Jul 2017 06:01:16 +0000 (14:01 +0800)
Fixes: http://tracker.ceph.com/issues/20684
Signed-off-by: Yang Honggang <joseph.yang@xtaotech.com>
src/osd/PrimaryLogPG.cc
src/osd/PrimaryLogPG.h

index 33ef908f692089353b699fc8d193aaf41cbb513d..26d7808b64ef91bdf2d610a436a94a24a7c3f670 100644 (file)
@@ -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);
 
index a8f7db5df4276379dc39c6b70f62938d3bd13bec..43b88f9883b4198c1f7a211cbd56ff787a8bcf67 100644 (file)
@@ -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;