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: v16.1.0~960^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ad1016b014d4c33dee3be66376bf9f3394160501;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 --- diff --git a/src/librbd/image/OpenRequest.cc b/src/librbd/image/OpenRequest.cc index 046d37d4ba7c..9b8e09810833 100644 --- a/src/librbd/image/OpenRequest.cc +++ b/src/librbd/image/OpenRequest.cc @@ -558,8 +558,8 @@ Context* OpenRequest::handle_init_plugin_registry(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); } diff --git a/src/librbd/plugin/ParentCache.cc b/src/librbd/plugin/ParentCache.cc index 9e1197933f59..0c50c8e71970 100644 --- a/src/librbd/plugin/ParentCache.cc +++ b/src/librbd/plugin/ParentCache.cc @@ -38,7 +38,8 @@ void ParentCache::init(I* image_ctx, Api& api, HookPoints* hook_points, m_image_ctx = image_ctx; 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()) { on_finish->complete(0); return; }