diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2012-10-18 16:49:24 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2012-10-24 10:26:20 +0200 |
commit | d9b902db3fb71fdcdfbb2aa9cc94a410dee864e5 (patch) | |
tree | 9102d91ad88014e5c04f0d26cdf0c7a991dd3adb /hmp.c | |
parent | 893f7ebafe4e8afc0ce4dbd9e64b3752f3036bbb (diff) | |
download | qemu-d9b902db3fb71fdcdfbb2aa9cc94a410dee864e5.tar.gz qemu-d9b902db3fb71fdcdfbb2aa9cc94a410dee864e5.tar.bz2 qemu-d9b902db3fb71fdcdfbb2aa9cc94a410dee864e5.zip |
qmp: add drive-mirror command
This adds the monitor commands that start the mirroring job.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'hmp.c')
-rw-r--r-- | hmp.c | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -771,6 +771,34 @@ void hmp_block_resize(Monitor *mon, const QDict *qdict) hmp_handle_error(mon, &errp); } +void hmp_drive_mirror(Monitor *mon, const QDict *qdict) +{ + const char *device = qdict_get_str(qdict, "device"); + const char *filename = qdict_get_str(qdict, "target"); + const char *format = qdict_get_try_str(qdict, "format"); + int reuse = qdict_get_try_bool(qdict, "reuse", 0); + int full = qdict_get_try_bool(qdict, "full", 0); + enum NewImageMode mode; + Error *errp = NULL; + + if (!filename) { + error_set(&errp, QERR_MISSING_PARAMETER, "target"); + hmp_handle_error(mon, &errp); + return; + } + + if (reuse) { + mode = NEW_IMAGE_MODE_EXISTING; + } else { + mode = NEW_IMAGE_MODE_ABSOLUTE_PATHS; + } + + qmp_drive_mirror(device, filename, !!format, format, + full ? MIRROR_SYNC_MODE_FULL : MIRROR_SYNC_MODE_TOP, + true, mode, false, 0, &errp); + hmp_handle_error(mon, &errp); +} + void hmp_snapshot_blkdev(Monitor *mon, const QDict *qdict) { const char *device = qdict_get_str(qdict, "device"); |