From: xiexingguo <258156334@qq.com> Date: Fri, 18 Dec 2015 10:37:06 +0000 (+0800) Subject: librbd: exit if parent snap is gone during clone X-Git-Tag: v10.0.3~208^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=395bf8a8becd147a185322a4406c8379f45e7dba;p=ceph.git librbd: exit if parent snap is gone during clone Fixes: #14118 Signed-off-by: xie xingguo --- diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index 37ded6c246c4..00e8f684d6f7 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -1549,7 +1549,7 @@ int invoke_async_request(ImageCtx *ictx, const std::string& request_type, p_imctx->snap_lock.get_read(); p_features = p_imctx->features; size = p_imctx->get_image_size(p_imctx->snap_id); - p_imctx->is_snap_protected(p_imctx->snap_id, &snap_protected); + r = p_imctx->is_snap_protected(p_imctx->snap_id, &snap_protected); p_imctx->snap_lock.put_read(); if ((p_features & RBD_FEATURE_LAYERING) != RBD_FEATURE_LAYERING) { @@ -1557,6 +1557,12 @@ int invoke_async_request(ImageCtx *ictx, const std::string& request_type, r = -ENOSYS; goto err_close_parent; } + + if (r < 0) { + // we lost the race with snap removal? + lderr(cct) << "unable to locate parent's snapshot" << dendl; + goto err_close_parent; + } if (!snap_protected) { lderr(cct) << "parent snapshot must be protected" << dendl;