diff options
author | Max Reitz <mreitz@redhat.com> | 2019-07-24 19:12:30 +0200 |
---|---|---|
committer | Max Reitz <mreitz@redhat.com> | 2019-08-19 17:13:26 +0200 |
commit | cdf3bc934ad1e5319b03f2c85f381f5ffd2f8ca8 (patch) | |
tree | 2e8dc4f2b68d10a6439335c1f733e563aaf71ec6 /include/block/block_int.h | |
parent | 4d7c487eac1652dfe4498fe84f32900ad461d61b (diff) | |
download | qemu-cdf3bc934ad1e5319b03f2c85f381f5ffd2f8ca8.zip qemu-cdf3bc934ad1e5319b03f2c85f381f5ffd2f8ca8.tar.gz qemu-cdf3bc934ad1e5319b03f2c85f381f5ffd2f8ca8.tar.bz2 |
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>
Diffstat (limited to 'include/block/block_int.h')
-rw-r--r-- | include/block/block_int.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/block/block_int.h b/include/block/block_int.h index aa697f1..8fa0116 100644 --- a/include/block/block_int.h +++ b/include/block/block_int.h @@ -1115,6 +1115,7 @@ BlockJob *commit_active_start(const char *job_id, BlockDriverState *bs, * @buf_size: The amount of data that can be in flight at one time. * @mode: Whether to collapse all images in the chain to the target. * @backing_mode: How to establish the target's backing chain after completion. + * @zero_target: Whether the target should be explicitly zero-initialized * @on_source_error: The action to take upon error reading from the source. * @on_target_error: The action to take upon error writing to the target. * @unmap: Whether to unmap target where source sectors only contain zeroes. @@ -1134,6 +1135,7 @@ void mirror_start(const char *job_id, BlockDriverState *bs, int creation_flags, int64_t speed, uint32_t granularity, int64_t buf_size, MirrorSyncMode mode, BlockMirrorBackingMode backing_mode, + bool zero_target, BlockdevOnError on_source_error, BlockdevOnError on_target_error, bool unmap, const char *filter_node_name, |