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: v10.2.1~15^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f221fedb3b34bccd80383096d6ccfa19a4a72db9;p=ceph.git librbd: assertion to ensure no concurrent processing of replay events Signed-off-by: Jason Dillaman (cherry picked from commit 44827a3e8e02529be84c829a76ef01f70e0d20ee) --- diff --git a/src/librbd/Journal.cc b/src/librbd/Journal.cc index 265a869d36f8..c74f918b3e41 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 424ef0e4b320..e9bad29efadc 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;