]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: update refresh image dispatch layer flush exclusions
authorJason Dillaman <dillaman@redhat.com>
Thu, 17 Sep 2020 17:05:27 +0000 (13:05 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 18 Sep 2020 03:52:31 +0000 (23:52 -0400)
Only flush requests coming from the refresh state machine or from the
exclusive-lock dispatch layer initializationshould be ignored. This is
because both can be initiated from the refresh state machine and
therefore deadlock.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/io/RefreshImageDispatch.cc

index 4632660ad8382f54b22e16fb35b24e23716acdd9..24a2038ca7ece1ec07ecc2e302ecd63f3be66cbe 100644 (file)
@@ -122,7 +122,11 @@ bool RefreshImageDispatch<I>::flush(
   auto cct = m_image_ctx->cct;
   ldout(cct, 20) << "tid=" << tid << dendl;
 
-  if (flush_source != FLUSH_SOURCE_USER) {
+  // The refresh state machine can initiate a flush and it can
+  // enable the exclusive-lock which will also attmept to flush.
+  if (flush_source == FLUSH_SOURCE_REFRESH ||
+      flush_source == FLUSH_SOURCE_EXCLUSIVE_LOCK_SKIP_REFRESH ||
+      flush_source == FLUSH_SOURCE_SHUTDOWN) {
     return false;
   }