From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: "Daniel P. Berrangé" <berrange@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>, Peter Krempa <pkrempa@redhat.com>,
"Denis V. Lunev" <den@virtuozzo.com>,
qemu-block@nongnu.org, Juan Quintela <quintela@redhat.com>,
qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>,
Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>,
Paolo Bonzini <pbonzini@redhat.com>,
Max Reitz <mreitz@redhat.com>, John Snow <jsnow@redhat.com>
Subject: Re: [PATCH v4 6/9] migration: wire up support for snapshot device selection
Date: Mon, 21 Sep 2020 18:41:10 +0100 [thread overview]
Message-ID: <20200921174110.GO3221@work-vm> (raw)
In-Reply-To: <20200915113523.2520317-7-berrange@redhat.com>
* Daniel P. Berrangé (berrange@redhat.com) wrote:
> Modify load_snapshot/save_snapshot to accept the device list and vmstate
> node name parameters previously added to the block layer.
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> ---
> include/migration/snapshot.h | 12 ++++++++++--
> migration/savevm.c | 24 ++++++++++++++----------
> monitor/hmp-cmds.c | 4 ++--
> replay/replay-snapshot.c | 4 ++--
> softmmu/vl.c | 2 +-
> 5 files changed, 29 insertions(+), 17 deletions(-)
>
> diff --git a/include/migration/snapshot.h b/include/migration/snapshot.h
> index d7db1174ef..b2c72e0a1b 100644
> --- a/include/migration/snapshot.h
> +++ b/include/migration/snapshot.h
> @@ -15,7 +15,15 @@
> #ifndef QEMU_MIGRATION_SNAPSHOT_H
> #define QEMU_MIGRATION_SNAPSHOT_H
>
> -int save_snapshot(const char *name, bool overwrite, Error **errp);
> -int load_snapshot(const char *name, Error **errp);
> +#include "qapi/qapi-builtin-types.h"
> +
> +int save_snapshot(const char *name, bool overwrite,
> + const char *vmstate,
> + bool has_devices, strList *devices,
> + Error **errp);
> +int load_snapshot(const char *name,
> + const char *vmstate,
> + bool has_devices, strList *devices,
> + Error **errp);
>
> #endif
> diff --git a/migration/savevm.c b/migration/savevm.c
> index 2025e3e579..b3d2ce7045 100644
> --- a/migration/savevm.c
> +++ b/migration/savevm.c
> @@ -43,6 +43,8 @@
> #include "qapi/error.h"
> #include "qapi/qapi-commands-migration.h"
> #include "qapi/qapi-commands-misc.h"
> +#include "qapi/clone-visitor.h"
> +#include "qapi/qapi-builtin-visit.h"
> #include "qapi/qmp/qerror.h"
> #include "qemu/error-report.h"
> #include "sysemu/cpus.h"
> @@ -2658,7 +2660,8 @@ int qemu_load_device_state(QEMUFile *f)
> return 0;
> }
>
> -int save_snapshot(const char *name, bool overwrite, Error **errp)
> +int save_snapshot(const char *name, bool overwrite, const char *vmstate,
> + bool has_devices, strList *devices, Error **errp)
> {
> BlockDriverState *bs;
> QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
> @@ -2680,18 +2683,18 @@ int save_snapshot(const char *name, bool overwrite, Error **errp)
> return ret;
> }
>
> - if (!bdrv_all_can_snapshot(false, NULL, errp)) {
> + if (!bdrv_all_can_snapshot(has_devices, devices, errp)) {
> return ret;
> }
>
> /* Delete old snapshots of the same name */
> if (name && overwrite) {
> - if (bdrv_all_delete_snapshot(name, false, NULL, errp) < 0) {
> + if (bdrv_all_delete_snapshot(name, has_devices, devices, errp) < 0) {
> return ret;
> }
> }
>
> - bs = bdrv_all_find_vmstate_bs(NULL, false, NULL, errp);
> + bs = bdrv_all_find_vmstate_bs(vmstate, has_devices, devices, errp);
> if (bs == NULL) {
> return ret;
> }
> @@ -2757,7 +2760,7 @@ int save_snapshot(const char *name, bool overwrite, Error **errp)
> aio_context_release(aio_context);
> aio_context = NULL;
>
> - ret = bdrv_all_create_snapshot(sn, bs, vm_state_size, false, NULL, errp);
> + ret = bdrv_all_create_snapshot(sn, bs, vm_state_size, has_devices, devices, errp);
> if (ret < 0) {
> goto the_end;
> }
> @@ -2858,7 +2861,8 @@ void qmp_xen_load_devices_state(const char *filename, Error **errp)
> migration_incoming_state_destroy();
> }
>
> -int load_snapshot(const char *name, Error **errp)
> +int load_snapshot(const char *name, const char *vmstate,
> + bool has_devices, strList *devices, Error **errp)
> {
> BlockDriverState *bs_vm_state;
> QEMUSnapshotInfo sn;
> @@ -2873,15 +2877,15 @@ int load_snapshot(const char *name, Error **errp)
> return -1;
> }
>
> - if (!bdrv_all_can_snapshot(false, NULL, errp)) {
> + if (!bdrv_all_can_snapshot(has_devices, devices, errp)) {
> return -1;
> }
> - ret = bdrv_all_find_snapshot(name, false, NULL, errp);
> + ret = bdrv_all_find_snapshot(name, has_devices, devices, errp);
> if (ret < 0) {
> return -1;
> }
>
> - bs_vm_state = bdrv_all_find_vmstate_bs(NULL, false, NULL, errp);
> + bs_vm_state = bdrv_all_find_vmstate_bs(vmstate, has_devices, devices, errp);
> if (!bs_vm_state) {
> return -1;
> }
> @@ -2902,7 +2906,7 @@ int load_snapshot(const char *name, Error **errp)
> /* Flush all IO requests so they don't interfere with the new state. */
> bdrv_drain_all_begin();
>
> - ret = bdrv_all_goto_snapshot(name, false, NULL, errp);
> + ret = bdrv_all_goto_snapshot(name, has_devices, devices, errp);
> if (ret < 0) {
> goto err_drain;
> }
> diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
> index c1b8533d0c..1191aac3ae 100644
> --- a/monitor/hmp-cmds.c
> +++ b/monitor/hmp-cmds.c
> @@ -1121,7 +1121,7 @@ void hmp_loadvm(Monitor *mon, const QDict *qdict)
>
> vm_stop(RUN_STATE_RESTORE_VM);
>
> - if (load_snapshot(name, &err) == 0 && saved_vm_running) {
> + if (load_snapshot(name, NULL, false, NULL, &err) == 0 && saved_vm_running) {
> vm_start();
> }
> hmp_handle_error(mon, err);
> @@ -1131,7 +1131,7 @@ void hmp_savevm(Monitor *mon, const QDict *qdict)
> {
> Error *err = NULL;
>
> - save_snapshot(qdict_get_try_str(qdict, "name"), true, &err);
> + save_snapshot(qdict_get_try_str(qdict, "name"), true, NULL, false, NULL, &err);
> hmp_handle_error(mon, err);
> }
>
> diff --git a/replay/replay-snapshot.c b/replay/replay-snapshot.c
> index 8e7ff97d11..8ed09177b5 100644
> --- a/replay/replay-snapshot.c
> +++ b/replay/replay-snapshot.c
> @@ -77,13 +77,13 @@ void replay_vmstate_init(void)
>
> if (replay_snapshot) {
> if (replay_mode == REPLAY_MODE_RECORD) {
> - if (save_snapshot(replay_snapshot, true, &err) != 0) {
> + if (save_snapshot(replay_snapshot, true, NULL, false, NULL, &err) != 0) {
> error_report_err(err);
> error_report("Could not create snapshot for icount record");
> exit(1);
> }
> } else if (replay_mode == REPLAY_MODE_PLAY) {
> - if (load_snapshot(replay_snapshot, &err) != 0) {
> + if (load_snapshot(replay_snapshot, NULL, false, NULL, &err) != 0) {
> error_report_err(err);
> error_report("Could not load snapshot for icount replay");
> exit(1);
> diff --git a/softmmu/vl.c b/softmmu/vl.c
> index f7b103467c..820d380229 100644
> --- a/softmmu/vl.c
> +++ b/softmmu/vl.c
> @@ -4459,7 +4459,7 @@ void qemu_init(int argc, char **argv, char **envp)
> register_global_state();
> if (loadvm) {
> Error *local_err = NULL;
> - if (load_snapshot(loadvm, &local_err) < 0) {
> + if (load_snapshot(loadvm, NULL, false, NULL, &local_err) < 0) {
> error_report_err(local_err);
> autostart = 0;
> exit(1);
> --
> 2.26.2
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2020-09-21 17:44 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-15 11:35 [PATCH v4 0/9] migration: bring improved savevm/loadvm/delvm to QMP Daniel P. Berrangé
2020-09-15 11:35 ` [PATCH v4 1/9] block: push error reporting into bdrv_all_*_snapshot functions Daniel P. Berrangé
2020-09-15 11:35 ` [PATCH v4 2/9] migration: stop returning errno from load_snapshot() Daniel P. Berrangé
2020-09-15 11:35 ` [PATCH v4 3/9] block: add ability to specify list of blockdevs during snapshot Daniel P. Berrangé
2020-09-15 11:35 ` [PATCH v4 4/9] block: allow specifying name of block device for vmstate storage Daniel P. Berrangé
2020-09-15 11:35 ` [PATCH v4 5/9] migration: control whether snapshots are ovewritten Daniel P. Berrangé
2020-09-16 7:47 ` Markus Armbruster
2020-09-16 8:25 ` Daniel P. Berrangé
2020-09-15 11:35 ` [PATCH v4 6/9] migration: wire up support for snapshot device selection Daniel P. Berrangé
2020-09-21 17:41 ` Dr. David Alan Gilbert [this message]
2020-09-15 11:35 ` [PATCH v4 7/9] migration: introduce a delete_snapshot wrapper Daniel P. Berrangé
2020-09-15 11:35 ` [PATCH v4 8/9] iotests: add support for capturing and matching QMP events Daniel P. Berrangé
2020-09-15 11:35 ` [PATCH v4 9/9] migration: introduce snapshot-{save, load, delete} QMP commands Daniel P. Berrangé
2020-09-16 8:17 ` Markus Armbruster
2020-09-16 8:27 ` Daniel P. Berrangé
2020-09-16 11:44 ` Markus Armbruster
2020-09-21 18:16 ` Eric Blake
2020-10-02 15:56 ` Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200921174110.GO3221@work-vm \
--to=dgilbert@redhat.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=den@virtuozzo.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=mreitz@redhat.com \
--cc=pavel.dovgaluk@ispras.ru \
--cc=pbonzini@redhat.com \
--cc=pkrempa@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.