mirror: Fix bdrv_has_zero_init() use
commitcdf3bc934ad1e5319b03f2c85f381f5ffd2f8ca8
authorMax Reitz <mreitz@redhat.com>
Wed, 24 Jul 2019 17:12:30 +0000 (24 19:12 +0200)
committerMax Reitz <mreitz@redhat.com>
Mon, 19 Aug 2019 15:13:26 +0000 (19 17:13 +0200)
tree2e8dc4f2b68d10a6439335c1f733e563aaf71ec6
parent4d7c487eac1652dfe4498fe84f32900ad461d61b
mirror: Fix bdrv_has_zero_init() use

bdrv_has_zero_init() only has meaning for newly created images or image
areas.  If the mirror job itself did not create the image, it cannot
rely on bdrv_has_zero_init()'s result to carry any meaning.

This is the case for drive-mirror with mode=existing and always for
blockdev-mirror.

Note that we only have to zero-initialize the target with sync=full,
because other modes actually do not promise that the target will contain
the same data as the source after the job -- sync=top only promises to
copy anything allocated in the top layer, and sync=none will only copy
new I/O.  (Which is how mirror has always handled it.)

Signed-off-by: Max Reitz <mreitz@redhat.com>
Message-id: 20190724171239.8764-3-mreitz@redhat.com
Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com>
Signed-off-by: Max Reitz <mreitz@redhat.com>
block/mirror.c
blockdev.c
include/block/block_int.h
tests/test-block-iothread.c