]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mds: fix issues with use-after-free in C_Flush_Journal
authorMilind Changire <mchangir@redhat.com>
Wed, 19 Mar 2025 05:49:21 +0000 (11:19 +0530)
committerMilind Changire <mchangir@redhat.com>
Wed, 20 Aug 2025 06:32:15 +0000 (12:02 +0530)
Moved dout() statement out of trim_expired_segments() to avoid
dereferencing 'this' object after object deletion via context completion
handler.

Fixes: https://tracker.ceph.com/issues/69953
Signed-off-by: Milind Changire <mchangir@redhat.com>
(cherry picked from commit d14fb9a44ac481bca9f87900aa6a73ec96a3cdce)

Conflicts:
src/mds/MDSRank.cc
- resolved conflicts between main and squid branches

src/mds/MDSRank.cc

index 85bc8e260e7f035938600a69b45894572d64ca7a..bc87248978f05f64d091c36fa44232f8f0673179 100644 (file)
@@ -213,10 +213,6 @@ private:
     // Now everyone I'm interested in is expired
     mdlog->trim_expired_segments();
 
-    dout(5) << __func__ << ": trim complete, expire_pos/trim_pos is now "
-            << std::hex << mdlog->get_journaler()->get_expire_pos() << "/"
-            << mdlog->get_journaler()->get_trimmed_pos() << dendl;
-
     write_journal_head();
   }
 
@@ -244,6 +240,10 @@ private:
 
   void finish(int r) override {
     dout(20) << __func__ << ": r=" << r << dendl;
+
+    dout(5) << __func__ << ": trimming is complete; wait for journal head write. Journal expire_pos/trim_pos is now "
+            << std::hex << mdlog->get_journaler()->get_expire_pos() << "/"
+            << mdlog->get_journaler()->get_trimmed_pos() << dendl;
     on_finish->complete(r);
   }