From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Thu, 23 Jun 2022 14:00:05 +0200 Subject: [PATCH] Revert "block/rbd: workaround for ceph issue #53784" This reverts commit fc176116cdea816ceb8dd969080b2b95f58edbc0 in preparation to revert 0347a8fd4c3faaedf119be04c197804be40a384b. Signed-off-by: Fabian Ebner --- block/rbd.c | 42 ++---------------------------------------- 1 file changed, 2 insertions(+), 40 deletions(-) diff --git a/block/rbd.c b/block/rbd.c index a4749f3b1b..53e0396b51 100644 --- a/block/rbd.c +++ b/block/rbd.c @@ -1511,7 +1511,6 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs, int status, r; RBDDiffIterateReq req = { .offs = offset }; uint64_t features, flags; - uint64_t head = 0; assert(offset + bytes <= s->image_size); @@ -1539,43 +1538,7 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs, return status; } -#if LIBRBD_VERSION_CODE < LIBRBD_VERSION(1, 17, 0) - /* - * librbd had a bug until early 2022 that affected all versions of ceph that - * supported fast-diff. This bug results in reporting of incorrect offsets - * if the offset parameter to rbd_diff_iterate2 is not object aligned. - * Work around this bug by rounding down the offset to object boundaries. - * This is OK because we call rbd_diff_iterate2 with whole_object = true. - * However, this workaround only works for non cloned images with default - * striping. - * - * See: https://tracker.ceph.com/issues/53784 - */ - - /* check if RBD image has non-default striping enabled */ - if (features & RBD_FEATURE_STRIPINGV2) { - return status; - } - -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - /* - * check if RBD image is a clone (= has a parent). - * - * rbd_get_parent_info is deprecated from Nautilus onwards, but the - * replacement rbd_get_parent is not present in Luminous and Mimic. - */ - if (rbd_get_parent_info(s->image, NULL, 0, NULL, 0, NULL, 0) != -ENOENT) { - return status; - } -#pragma GCC diagnostic pop - - head = req.offs & (s->object_size - 1); - req.offs -= head; - bytes += head; -#endif - - r = rbd_diff_iterate2(s->image, NULL, req.offs, bytes, true, true, + r = rbd_diff_iterate2(s->image, NULL, offset, bytes, true, true, qemu_rbd_diff_iterate_cb, &req); if (r < 0 && r != QEMU_RBD_EXIT_DIFF_ITERATE2) { return status; @@ -1594,8 +1557,7 @@ static int coroutine_fn qemu_rbd_co_block_status(BlockDriverState *bs, status = BDRV_BLOCK_ZERO | BDRV_BLOCK_OFFSET_VALID; } - assert(req.bytes > head); - *pnum = req.bytes - head; + *pnum = req.bytes; return status; }