From: Jason Dillaman Date: Fri, 6 May 2016 15:16:37 +0000 (-0400) Subject: librbd: assertion to ensure no concurrent processing of replay events X-Git-Tag: v11.0.0~605^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F8973%2Fhead;p=ceph.git librbd: assertion to ensure no concurrent processing of replay events Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/Journal.cc b/src/librbd/Journal.cc index 265a869d36f..c74f918b3e4 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 424ef0e4b32..e9bad29efad 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;