From: Jason Dillaman Date: Mon, 21 Sep 2020 18:05:17 +0000 (-0400) Subject: librbd: skip cache initialization if data IoCtx is invalid X-Git-Tag: v15.2.9~129^2~5^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F37674%2Fhead;p=ceph.git librbd: skip cache initialization if data IoCtx is invalid This resolves the potential for an assertion failure in the cache constructors that occurs when the data IoCtx is not valid. Errors are deferred until actual IOs are issued against the invalid data pool. Signed-off-by: Jason Dillaman (cherry picked from commit ad1016b014d4c33dee3be66376bf9f3394160501) Conflicts: src/librbd/plugin/ParentCache.cc - parent_cache_enabled is not split to above file. We just add another data ioctx checking before sending parent cache --- diff --git a/src/librbd/image/OpenRequest.cc b/src/librbd/image/OpenRequest.cc index 2e30242e8f42..2edf2b14fe13 100644 --- a/src/librbd/image/OpenRequest.cc +++ b/src/librbd/image/OpenRequest.cc @@ -534,7 +534,8 @@ Context* OpenRequest::send_parent_cache(int *result) { bool parent_cache_enabled = m_image_ctx->config.template get_val( "rbd_parent_cache_enabled"); - if (m_image_ctx->child == nullptr || !parent_cache_enabled) { + if (m_image_ctx->child == nullptr || !parent_cache_enabled || + !m_image_ctx->data_ctx.is_valid()) { return send_init_cache(result); } @@ -563,8 +564,8 @@ Context* OpenRequest::handle_parent_cache(int* result) { template Context *OpenRequest::send_init_cache(int *result) { - // cache is disabled or parent image context - if (!m_image_ctx->cache || m_image_ctx->child != nullptr) { + if (!m_image_ctx->cache || m_image_ctx->child != nullptr || + !m_image_ctx->data_ctx.is_valid()) { return send_register_watch(result); }