This would be useful in the next step when QMP version of this call will be introduced.
Signed-off-by: Denis V. Lunev <d...@openvz.org> Reviewed-by: Juan Quintela <quint...@redhat.com> CC: Amit Shah <amit.s...@redhat.com> CC: Markus Armbruster <arm...@redhat.com> CC: Eric Blake <ebl...@redhat.com> --- migration/savevm.c | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/migration/savevm.c b/migration/savevm.c index 0ad1b93..b7278ac 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -1905,7 +1905,7 @@ int qemu_loadvm_state(QEMUFile *f) return ret; } -void hmp_savevm(Monitor *mon, const QDict *qdict) +static void do_savevm(const char *name, Error **errp) { BlockDriverState *bs, *bs1; QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1; @@ -1915,28 +1915,27 @@ void hmp_savevm(Monitor *mon, const QDict *qdict) uint64_t vm_state_size; qemu_timeval tv; struct tm tm; - const char *name = qdict_get_try_str(qdict, "name"); Error *local_err = NULL; AioContext *aio_context; if (!bdrv_all_can_snapshot(&bs)) { - monitor_printf(mon, "Device '%s' is writable but does not " - "support snapshots.\n", bdrv_get_device_name(bs)); + error_setg(errp, + "Device '%s' is writable but does not support snapshots.", + bdrv_get_device_name(bs)); return; } /* Delete old snapshots of the same name */ if (name && bdrv_all_delete_snapshot(name, &bs1, &local_err) < 0) { - monitor_printf(mon, - "Error while deleting snapshot on device '%s': %s\n", - bdrv_get_device_name(bs1), error_get_pretty(local_err)); + error_setg(errp, "Error while deleting snapshot on device '%s': %s", + bdrv_get_device_name(bs1), error_get_pretty(local_err)); error_free(local_err); return; } bs = bdrv_all_find_vmstate_bs(); if (bs == NULL) { - monitor_printf(mon, "No block device can accept snapshots\n"); + error_setg(errp, "No block device can accept snapshots"); return; } aio_context = bdrv_get_aio_context(bs); @@ -1945,7 +1944,7 @@ void hmp_savevm(Monitor *mon, const QDict *qdict) ret = global_state_store(); if (ret) { - monitor_printf(mon, "Error saving global state\n"); + error_setg(errp, "Error saving global state"); return; } vm_stop(RUN_STATE_SAVE_VM); @@ -1977,22 +1976,20 @@ void hmp_savevm(Monitor *mon, const QDict *qdict) /* save the VM state */ f = qemu_fopen_bdrv(bs, 1); if (!f) { - monitor_printf(mon, "Could not open VM state file\n"); + error_setg(errp, "Could not open VM state file"); goto the_end; } - ret = qemu_savevm_state(f, &local_err); + ret = qemu_savevm_state(f, errp); vm_state_size = qemu_ftell(f); qemu_fclose(f); if (ret < 0) { - monitor_printf(mon, "%s\n", error_get_pretty(local_err)); - error_free(local_err); goto the_end; } ret = bdrv_all_create_snapshot(sn, bs, vm_state_size, &bs); if (ret < 0) { - monitor_printf(mon, "Error while creating snapshot on '%s'\n", - bdrv_get_device_name(bs)); + error_setg(errp, "Error while creating snapshot on '%s'", + bdrv_get_device_name(bs)); } the_end: @@ -2002,6 +1999,17 @@ void hmp_savevm(Monitor *mon, const QDict *qdict) } } +void hmp_savevm(Monitor *mon, const QDict *qdict) +{ + Error *local_err = NULL; + + do_savevm(qdict_get_try_str(qdict, "name"), &local_err); + + if (local_err != NULL) { + error_report_err(local_err); + } +} + void qmp_xen_save_devices_state(const char *filename, Error **errp) { QEMUFile *f; -- 2.5.0