From: Jason Dillaman Date: Tue, 19 Feb 2019 21:06:48 +0000 (-0500) Subject: librbd: add missing shutdown states to managed lock helper X-Git-Tag: v14.1.1~114^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=82af5710ad49dd6e24c2736a9865e1a41add89a2;p=ceph.git librbd: add missing shutdown states to managed lock helper The PRE_SHUTTING_DOWN and SHUTTING_DOWN states were missed in the 'is_state_shutdown' helper method. This resulted in rbd-mirror potentially entering an infinite loop during shutdown. http://tracker.ceph.com/issues/38387 Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/ManagedLock.cc b/src/librbd/ManagedLock.cc index 6118cd09cfa..15d2016f26a 100644 --- a/src/librbd/ManagedLock.cc +++ b/src/librbd/ManagedLock.cc @@ -454,9 +454,17 @@ template bool ManagedLock::is_state_shutdown() const { ceph_assert(m_lock.is_locked()); - return ((m_state == STATE_SHUTDOWN) || - (!m_actions_contexts.empty() && - m_actions_contexts.back().first == ACTION_SHUT_DOWN)); + switch (m_state) { + case STATE_PRE_SHUTTING_DOWN: + case STATE_SHUTTING_DOWN: + case STATE_SHUTDOWN: + return true; + default: + break; + } + + return (!m_actions_contexts.empty() && + m_actions_contexts.back().first == ACTION_SHUT_DOWN); } template