From 2122542a2e1bed563f633e52ac272f0ccb5a236a Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 17 Sep 2020 13:05:27 -0400 Subject: [PATCH] librbd: update refresh image dispatch layer flush exclusions 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 --- src/librbd/io/RefreshImageDispatch.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/librbd/io/RefreshImageDispatch.cc b/src/librbd/io/RefreshImageDispatch.cc index 4632660ad8382..24a2038ca7ece 100644 --- a/src/librbd/io/RefreshImageDispatch.cc +++ b/src/librbd/io/RefreshImageDispatch.cc @@ -122,7 +122,11 @@ bool RefreshImageDispatch::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; } -- 2.39.5