From 44827a3e8e02529be84c829a76ef01f70e0d20ee Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Fri, 6 May 2016 11:16:37 -0400 Subject: [PATCH] librbd: assertion to ensure no concurrent processing of replay events Signed-off-by: Jason Dillaman --- src/librbd/Journal.cc | 9 +++++++++ src/librbd/Journal.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/librbd/Journal.cc b/src/librbd/Journal.cc index 265a869d36f8a..c74f918b3e41a 100644 --- a/src/librbd/Journal.cc +++ b/src/librbd/Journal.cc @@ -1201,6 +1201,10 @@ void Journal::handle_replay_ready() { if (!m_journaler->try_pop_front(&replay_entry)) { return; } + + // only one entry should be in-flight at a time + assert(!m_processing_entry); + m_processing_entry = true; } bufferlist data = replay_entry.get_data(); @@ -1246,6 +1250,11 @@ void Journal::handle_replay_process_ready(int r) { ldout(cct, 20) << this << " " << __func__ << dendl; assert(r == 0); + { + Mutex::Locker locker(m_lock); + assert(m_processing_entry); + m_processing_entry = false; + } handle_replay_ready(); } diff --git a/src/librbd/Journal.h b/src/librbd/Journal.h index 424ef0e4b3201..e9bad29efadc0 100644 --- a/src/librbd/Journal.h +++ b/src/librbd/Journal.h @@ -273,6 +273,7 @@ private: atomic_t m_op_tid; TidToFutures m_op_futures; + bool m_processing_entry = false; bool m_blocking_writes; journal::Replay *m_journal_replay; -- 2.39.5