On 21.04.20 23:20, Eric Blake wrote: > Add a new test covering the 'qemu-img bitmap' subcommand, as well as > 'qemu-img convert --bitmaps', both added in recent patches. > > Signed-off-by: Eric Blake <[email protected]> > --- > tests/qemu-iotests/291 | 103 +++++++++++++++++++++++++++++++++++++ > tests/qemu-iotests/291.out | 78 ++++++++++++++++++++++++++++ > tests/qemu-iotests/group | 1 + > 3 files changed, 182 insertions(+) > create mode 100755 tests/qemu-iotests/291 > create mode 100644 tests/qemu-iotests/291.out > > diff --git a/tests/qemu-iotests/291 b/tests/qemu-iotests/291 > new file mode 100755 > index 000000000000..77713c0cfea7 > --- /dev/null > +++ b/tests/qemu-iotests/291
[...]
> +echo
> +echo "=== Bitmap preservation not possible to non-qcow2 ==="
> +echo
> +
> +mv "$TEST_IMG" "$TEST_IMG.orig"
“mv” doesn’t work images with external data files.
(ORIG_IMG=$TEST_IMG; TEST_IMG="$TEST_IMG".orig should work)
> +$QEMU_IMG convert --bitmaps -O raw "$TEST_IMG.orig" "$TEST_IMG"
> +
> +echo
> +echo "=== Convert with bitmap preservation ==="
> +echo
> +
> +# Only bitmaps from the active layer are copied
That’s kind of obvious when you think about (whenever an image is
attached to a VM, only the active layer’s bitmaps are visible, not those
from the backing chain), but maybe this should be noted in the
documentation?
> +$QEMU_IMG convert --bitmaps -O qcow2 "$TEST_IMG.orig" "$TEST_IMG"
> +$QEMU_IMG info "$TEST_IMG" | _filter_img_info --format-specific
> +# But we can also merge in bitmaps from other layers
> +$QEMU_IMG bitmap --add --disabled -f $IMGFMT "$TEST_IMG" b0
> +$QEMU_IMG bitmap --add -f $IMGFMT "$TEST_IMG" tmp
> +$QEMU_IMG bitmap --merge b0 -b "$TEST_IMG.base" -F $IMGFMT "$TEST_IMG" tmp
> +$QEMU_IMG bitmap --merge tmp "$TEST_IMG" b0
> +$QEMU_IMG bitmap --remove -f $IMGFMT "$TEST_IMG" tmp
Why do we need tmp here? Can’t we just merge base’s b0 directly into
$TEST_IMG’s b0?
[...]
> diff --git a/tests/qemu-iotests/291.out b/tests/qemu-iotests/291.out
> new file mode 100644
> index 000000000000..d716c0c7cc0b
> --- /dev/null
> +++ b/tests/qemu-iotests/291.out
[...]
> +=== Check bitmap contents ===
> +
> +[{ "start": 0, "length": 3145728, "depth": 0, "zero": false, "data": true,
> "offset": OFFSET},
> +{ "start": 3145728, "length": 1048576, "depth": 0, "zero": false, "data":
> false},
> +{ "start": 4194304, "length": 6291456, "depth": 0, "zero": false, "data":
> true, "offset": OFFSET}]
> +[{ "start": 0, "length": 1048576, "depth": 0, "zero": false, "data": true,
> "offset": OFFSET},
> +{ "start": 1048576, "length": 1048576, "depth": 0, "zero": false, "data":
> false},
> +{ "start": 2097152, "length": 8388608, "depth": 0, "zero": false, "data":
> true, "offset": OFFSET}]
> +[{ "start": 0, "length": 2097152, "depth": 0, "zero": false, "data": true,
> "offset": OFFSET},
> +{ "start": 2097152, "length": 1048576, "depth": 0, "zero": false, "data":
> false},
> +{ "start": 3145728, "length": 7340032, "depth": 0, "zero": false, "data":
> true, "offset": OFFSET}]
Am I looking at this wrong or does the bitmap data seem to be inverted?
Everywhere where I’d expect the bitmaps to be cleared, this map reports
data=true, whereas where I’d expect them to be set, it reports data=false.
I suppose that’s intentional, but can you explain this behavior to me?
Max
> +*** done
signature.asc
Description: OpenPGP digital signature
