summaryrefslogtreecommitdiff
path: root/block_int.h
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2012-10-18 16:49:28 +0200
committerKevin Wolf <kwolf@redhat.com>2012-10-24 10:26:22 +0200
commitb952b5589a36114e06201c0d2e82c293dbad2b1f (patch)
treec1ea734e0c3539c345a25a19844fd6bc66e46c7f /block_int.h
parent3bd293c3fdc8b4052b9fc357e0b28cba20e73099 (diff)
downloadqemu-b952b5589a36114e06201c0d2e82c293dbad2b1f.tar.gz
mirror: add support for on-source-error/on-target-error
Error management is important for mirroring; otherwise, an error on the target (even something as "innocent" as ENOSPC) requires to start again with a full copy. Similar to on_read_error/on_write_error, two separate knobs are provided for on_source_error (reads) and on_target_error (writes). The default is 'report' for both. The 'ignore' policy will leave the sector dirty, so that it will be retried later. Thus, it will not cause corruption. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'block_int.h')
-rw-r--r--block_int.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/block_int.h b/block_int.h
index aaa46a83b0..00204eb82e 100644
--- a/block_int.h
+++ b/block_int.h
@@ -337,6 +337,8 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base,
* @target: Block device to write to.
* @speed: The maximum speed, in bytes per second, or 0 for unlimited.
* @mode: Whether to collapse all images in the chain to the target.
+ * @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.
* @cb: Completion function for the job.
* @opaque: Opaque pointer value passed to @cb.
* @errp: Error object.
@@ -348,6 +350,8 @@ void commit_start(BlockDriverState *bs, BlockDriverState *base,
*/
void mirror_start(BlockDriverState *bs, BlockDriverState *target,
int64_t speed, MirrorSyncMode mode,
+ BlockdevOnError on_source_error,
+ BlockdevOnError on_target_error,
BlockDriverCompletionFunc *cb,
void *opaque, Error **errp);