qemu-img: Fix preallocation with -S 0 for convert
authorMax Reitz <mreitz@redhat.com>
Thu, 24 Mar 2016 22:33:57 +0000 (23:33 +0100)
committerKevin Wolf <kwolf@redhat.com>
Wed, 30 Mar 2016 10:16:03 +0000 (12:16 +0200)
commitaad15de4275d2fc90acdf6101493dfee4e39b803
treeec0b15021361aa69db6f3587bd2f41b87bbc26f8
parent09cf9db1bcd60d9889b774925ba7058286d35412
qemu-img: Fix preallocation with -S 0 for convert

When passing -S 0 to qemu-img convert, the target image is supposed to
be fully allocated. Right now, this is not the case if the source image
contains areas which bdrv_get_block_status() reports as being zero.

This patch changes a zeroed area's status from BLK_ZERO to BLK_DATA
before invoking convert_write() if -S 0 has been specified. In addition,
the check whether convert_read() actually needs to do anything
(basically only if the current area is a BLK_DATA area) is pulled out of
that function to the caller.

If -S 0 has been specified, zeroed areas need to be written as data to
the output, thus they then have to be accounted when calculating the
progress made.

This patch changes the reference output for iotest 122; contrary to what
it assumed, -S 0 really should allocate everything in the output, not
just areas that are filled with zeros (as opposed to being zeroed).

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
qemu-img.c
tests/qemu-iotests/122.out