From: Dongsheng Yang Date: Mon, 23 Jan 2017 05:30:17 +0000 (+0800) Subject: librbd: remove header when id missing X-Git-Tag: v12.0.1~282^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3d26d932affd09171c902462c7d226eb428a7647;p=ceph.git librbd: remove header when id missing Signed-off-by: Dongsheng Yang --- diff --git a/qa/workunits/rbd/copy.sh b/qa/workunits/rbd/copy.sh index 68778c148379..bb6066acb3ce 100755 --- a/qa/workunits/rbd/copy.sh +++ b/qa/workunits/rbd/copy.sh @@ -191,6 +191,12 @@ test_remove() { rbd rm test2 rbd ls | wc -l | grep "^0$" + # remove with id missing + rbd create --image-format 2 -s 1 test2 + rados -p rbd rm rbd_id.test2 + rbd rm test2 + rbd ls | wc -l | grep "^0$" + # remove with header and id missing rbd create --image-format 2 -s 1 test2 HEADER=$(rados -p rbd ls | grep '^rbd_header') diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index 8cd4f16efa28..703e496e259e 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -1820,6 +1820,13 @@ void filter_out_mirror_watchers(ImageCtx *ictx, } if (!id.empty()) { + ldout(cct, 2) << "removing header..." << dendl; + r = io_ctx.remove(util::header_name(id)); + if (r < 0 && r != -ENOENT) { + lderr(cct) << "error removing header: " << cpp_strerror(-r) << dendl; + return r; + } + ldout(cct, 10) << "removing journal..." << dendl; r = Journal<>::remove(io_ctx, id); if (r < 0 && r != -ENOENT) {