[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 06/10] migration: control whether snapshots are ovewritten
From: |
Daniel P . Berrangé |
Subject: |
[PATCH v5 06/10] migration: control whether snapshots are ovewritten |
Date: |
Fri, 2 Oct 2020 17:27:43 +0100 |
The traditional HMP "savevm" command will overwrite an existing snapshot
if it already exists with the requested name. This new flag allows this
to be controlled allowing for safer behaviour with a future QMP command.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
include/migration/snapshot.h | 2 +-
migration/savevm.c | 19 ++++++++++++++++---
monitor/hmp-cmds.c | 2 +-
replay/replay-snapshot.c | 2 +-
4 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/include/migration/snapshot.h b/include/migration/snapshot.h
index c85b6ec75b..d7db1174ef 100644
--- a/include/migration/snapshot.h
+++ b/include/migration/snapshot.h
@@ -15,7 +15,7 @@
#ifndef QEMU_MIGRATION_SNAPSHOT_H
#define QEMU_MIGRATION_SNAPSHOT_H
-int save_snapshot(const char *name, Error **errp);
+int save_snapshot(const char *name, bool overwrite, Error **errp);
int load_snapshot(const char *name, Error **errp);
#endif
diff --git a/migration/savevm.c b/migration/savevm.c
index 63578c461a..95c14ba5ec 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -2658,7 +2658,7 @@ int qemu_load_device_state(QEMUFile *f)
return 0;
}
-int save_snapshot(const char *name, Error **errp)
+int save_snapshot(const char *name, bool overwrite, Error **errp)
{
BlockDriverState *bs;
QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
@@ -2686,8 +2686,21 @@ int save_snapshot(const char *name, Error **errp)
/* Delete old snapshots of the same name */
if (name) {
- if (bdrv_all_delete_snapshot(name, false, NULL, errp) < 0) {
- return ret;
+ if (overwrite) {
+ if (bdrv_all_delete_snapshot(name, false, NULL, errp) < 0) {
+ return ret;
+ }
+ } else {
+ ret2 = bdrv_all_has_snapshot(name, false, NULL, errp);
+ if (ret2 < 0) {
+ return -1;
+ }
+ if (ret2 == 1) {
+ error_setg(errp,
+ "Snapshot '%s' already exists in one or more
devices",
+ name);
+ return -1;
+ }
}
}
diff --git a/monitor/hmp-cmds.c b/monitor/hmp-cmds.c
index f1b9df7250..685014b544 100644
--- a/monitor/hmp-cmds.c
+++ b/monitor/hmp-cmds.c
@@ -1133,7 +1133,7 @@ void hmp_savevm(Monitor *mon, const QDict *qdict)
{
Error *err = NULL;
- save_snapshot(qdict_get_try_str(qdict, "name"), &err);
+ save_snapshot(qdict_get_try_str(qdict, "name"), true, &err);
hmp_handle_error(mon, err);
}
diff --git a/replay/replay-snapshot.c b/replay/replay-snapshot.c
index e26fa4c892..8e7ff97d11 100644
--- a/replay/replay-snapshot.c
+++ b/replay/replay-snapshot.c
@@ -77,7 +77,7 @@ void replay_vmstate_init(void)
if (replay_snapshot) {
if (replay_mode == REPLAY_MODE_RECORD) {
- if (save_snapshot(replay_snapshot, &err) != 0) {
+ if (save_snapshot(replay_snapshot, true, &err) != 0) {
error_report_err(err);
error_report("Could not create snapshot for icount record");
exit(1);
--
2.26.2
- [PATCH v5 00/10] migration: bring improved savevm/loadvm/delvm to QMP, Daniel P . Berrangé, 2020/10/02
- [PATCH v5 01/10] block: push error reporting into bdrv_all_*_snapshot functions, Daniel P . Berrangé, 2020/10/02
- [PATCH v5 02/10] migration: stop returning errno from load_snapshot(), Daniel P . Berrangé, 2020/10/02
- [PATCH v5 03/10] block: add ability to specify list of blockdevs during snapshot, Daniel P . Berrangé, 2020/10/02
- [PATCH v5 04/10] block: allow specifying name of block device for vmstate storage, Daniel P . Berrangé, 2020/10/02
- [PATCH v5 05/10] block: rename and alter bdrv_all_find_snapshot semantics, Daniel P . Berrangé, 2020/10/02
- [PATCH v5 06/10] migration: control whether snapshots are ovewritten,
Daniel P . Berrangé <=
- [PATCH v5 07/10] migration: wire up support for snapshot device selection, Daniel P . Berrangé, 2020/10/02
- [PATCH v5 08/10] migration: introduce a delete_snapshot wrapper, Daniel P . Berrangé, 2020/10/02
- [PATCH v5 09/10] iotests: add support for capturing and matching QMP events, Daniel P . Berrangé, 2020/10/02
- [PATCH v5 10/10] migration: introduce snapshot-{save, load, delete} QMP commands, Daniel P . Berrangé, 2020/10/02
- Re: [PATCH v5 10/10] migration: introduce snapshot-{save, load, delete} QMP commands, Eric Blake, 2020/10/02
- Re: [PATCH v5 10/10] migration: introduce snapshot-{save, load, delete} QMP commands, Markus Armbruster, 2020/10/05
- Re: [PATCH v5 10/10] migration: introduce snapshot-{save, load, delete} QMP commands, Daniel P . Berrangé, 2020/10/05
- Re: [PATCH v5 10/10] migration: introduce snapshot-{save, load, delete} QMP commands, Markus Armbruster, 2020/10/05
- Re: [PATCH v5 10/10] migration: introduce snapshot-{save,load,delete} QMP commands, Daniel P . Berrangé, 2020/10/05
- Re: [PATCH v5 10/10] migration: introduce snapshot-{save,load,delete} QMP commands, Dr. David Alan Gilbert, 2020/10/06