From: Jason Dillaman Date: Wed, 27 Apr 2016 19:56:11 +0000 (-0400) Subject: librbd: propagate any image refresh errors back to caller X-Git-Tag: v11.0.0~804^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F8791%2Fhead;p=ceph.git librbd: propagate any image refresh errors back to caller Previously, the saved error code was only propagated when an image flush was required. Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/image/RefreshRequest.cc b/src/librbd/image/RefreshRequest.cc index ecb7cae7bdf4..7d9ab78440a0 100644 --- a/src/librbd/image/RefreshRequest.cc +++ b/src/librbd/image/RefreshRequest.cc @@ -736,7 +736,14 @@ Context *RefreshRequest::send_flush_aio() { klass, &klass::handle_flush_aio>(this); m_image_ctx.flush(ctx); return nullptr; + } else if (m_error_result < 0) { + // propagate saved error back to caller + Context *ctx = create_context_callback< + RefreshRequest, &RefreshRequest::handle_error>(this); + m_image_ctx.op_work_queue->queue(ctx, 0); + return nullptr; } + return m_on_finish; } @@ -750,8 +757,16 @@ Context *RefreshRequest::handle_flush_aio(int *result) { << dendl; } + return handle_error(result); +} + +template +Context *RefreshRequest::handle_error(int *result) { if (m_error_result < 0) { *result = m_error_result; + + CephContext *cct = m_image_ctx.cct; + ldout(cct, 10) << this << " " << __func__ << ": r=" << *result << dendl; } return m_on_finish; } diff --git a/src/librbd/image/RefreshRequest.h b/src/librbd/image/RefreshRequest.h index 71fe50979e22..fac07fbca54d 100644 --- a/src/librbd/image/RefreshRequest.h +++ b/src/librbd/image/RefreshRequest.h @@ -178,6 +178,8 @@ private: Context *send_flush_aio(); Context *handle_flush_aio(int *result); + Context *handle_error(int *result); + void save_result(int *result) { if (m_error_result == 0 && *result < 0) { m_error_result = *result;