From a3aa565bfbfe30e32ddb57a11b6b2e67e0826d7a Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Fri, 13 Nov 2015 02:00:21 -0500 Subject: [PATCH] journal: avoid holding lock while marking ops are complete There is a possibility of a race if the JournalTrimmer destructor is waiting for an async op to complete but the op is flagged as complete while the mutex is being held. Signed-off-by: Jason Dillaman --- src/journal/JournalTrimmer.cc | 2 -- src/journal/JournalTrimmer.h | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/journal/JournalTrimmer.cc b/src/journal/JournalTrimmer.cc index 2af67a8298393..33e3be2c5b0d1 100644 --- a/src/journal/JournalTrimmer.cc +++ b/src/journal/JournalTrimmer.cc @@ -147,7 +147,6 @@ void JournalTrimmer::handle_commit_position_safe( trim_objects(object_set_position.object_number / splay_width); } } - m_async_op_tracker.finish_op(); } void JournalTrimmer::handle_set_removed(int r, uint64_t object_set) { @@ -175,7 +174,6 @@ void JournalTrimmer::handle_set_removed(int r, uint64_t object_set) { ldout(m_cct, 20) << "completing remove set context" << dendl; m_remove_set_ctx->complete(r); } - m_async_op_tracker.finish_op(); } JournalTrimmer::C_RemoveSet::C_RemoveSet(JournalTrimmer *_journal_trimmer, diff --git a/src/journal/JournalTrimmer.h b/src/journal/JournalTrimmer.h index 937340733d703..9f557a7671bc9 100644 --- a/src/journal/JournalTrimmer.h +++ b/src/journal/JournalTrimmer.h @@ -37,6 +37,7 @@ private: virtual void finish(int r) { journal_trimmer->handle_commit_position_safe(r, object_set_position); + journal_trimmer->m_async_op_tracker.finish_op(); } }; struct C_RemoveSet : public Context { @@ -51,6 +52,7 @@ private: virtual void complete(int r); virtual void finish(int r) { journal_trimmer->handle_set_removed(r, object_set); + journal_trimmer->m_async_op_tracker.finish_op(); } }; -- 2.39.5