[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v11 05/12] block: allow specifying name of block device for vmsta
From: |
Daniel P . Berrangé |
Subject: |
[PATCH v11 05/12] block: allow specifying name of block device for vmstate storage |
Date: |
Thu, 4 Feb 2021 12:48:27 +0000 |
Currently the vmstate will be stored in the first block device that
supports snapshots. Historically this would have usually been the
root device, but with UEFI it might be the variable store. There
needs to be a way to override the choice of block device to store
the state in.
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
block/monitor/block-hmp-cmds.c | 2 +-
block/snapshot.c | 26 +++++++++++++++++++++++---
include/block/snapshot.h | 3 ++-
migration/savevm.c | 4 ++--
replay/replay-debugging.c | 2 +-
tests/qemu-iotests/267.out | 12 ++++++------
6 files changed, 35 insertions(+), 14 deletions(-)
diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c
index e15121be1f..9cc5d4b51e 100644
--- a/block/monitor/block-hmp-cmds.c
+++ b/block/monitor/block-hmp-cmds.c
@@ -902,7 +902,7 @@ void hmp_info_snapshots(Monitor *mon, const QDict *qdict)
SnapshotEntry *snapshot_entry;
Error *err = NULL;
- bs = bdrv_all_find_vmstate_bs(false, NULL, &err);
+ bs = bdrv_all_find_vmstate_bs(NULL, false, NULL, &err);
if (!bs) {
error_report_err(err);
return;
diff --git a/block/snapshot.c b/block/snapshot.c
index 220173deae..0b129bee8f 100644
--- a/block/snapshot.c
+++ b/block/snapshot.c
@@ -678,7 +678,9 @@ int bdrv_all_create_snapshot(QEMUSnapshotInfo *sn,
return 0;
}
-BlockDriverState *bdrv_all_find_vmstate_bs(bool has_devices, strList *devices,
+
+BlockDriverState *bdrv_all_find_vmstate_bs(const char *vmstate_bs,
+ bool has_devices, strList *devices,
Error **errp)
{
g_autoptr(GList) bdrvs = NULL;
@@ -699,13 +701,31 @@ BlockDriverState *bdrv_all_find_vmstate_bs(bool
has_devices, strList *devices,
bdrv_can_snapshot(bs);
aio_context_release(ctx);
- if (found) {
+ if (vmstate_bs) {
+ if (g_str_equal(vmstate_bs,
+ bdrv_get_node_name(bs))) {
+ if (found) {
+ return bs;
+ } else {
+ error_setg(errp,
+ "vmstate block device '%s' does not support
snapshots",
+ vmstate_bs);
+ return NULL;
+ }
+ }
+ } else if (found) {
return bs;
}
iterbdrvs = iterbdrvs->next;
}
- error_setg(errp, "No block device supports snapshots");
+ if (vmstate_bs) {
+ error_setg(errp,
+ "vmstate block device '%s' does not exist", vmstate_bs);
+ } else {
+ error_setg(errp,
+ "no block device can store vmstate for snapshot");
+ }
return NULL;
}
diff --git a/include/block/snapshot.h b/include/block/snapshot.h
index 2569a903f2..8a6a37240d 100644
--- a/include/block/snapshot.h
+++ b/include/block/snapshot.h
@@ -95,7 +95,8 @@ int bdrv_all_create_snapshot(QEMUSnapshotInfo *sn,
strList *devices,
Error **errp);
-BlockDriverState *bdrv_all_find_vmstate_bs(bool has_devices, strList *devices,
+BlockDriverState *bdrv_all_find_vmstate_bs(const char *vmstate_bs,
+ bool has_devices, strList *devices,
Error **errp);
#endif
diff --git a/migration/savevm.c b/migration/savevm.c
index 90dded91f4..1fc4bffe8b 100644
--- a/migration/savevm.c
+++ b/migration/savevm.c
@@ -2762,7 +2762,7 @@ bool save_snapshot(const char *name, Error **errp)
}
}
- bs = bdrv_all_find_vmstate_bs(false, NULL, errp);
+ bs = bdrv_all_find_vmstate_bs(NULL, false, NULL, errp);
if (bs == NULL) {
return false;
}
@@ -2947,7 +2947,7 @@ bool load_snapshot(const char *name, Error **errp)
return false;
}
- bs_vm_state = bdrv_all_find_vmstate_bs(false, NULL, errp);
+ bs_vm_state = bdrv_all_find_vmstate_bs(NULL, false, NULL, errp);
if (!bs_vm_state) {
return false;
}
diff --git a/replay/replay-debugging.c b/replay/replay-debugging.c
index 67d8237077..ca37cf4025 100644
--- a/replay/replay-debugging.c
+++ b/replay/replay-debugging.c
@@ -148,7 +148,7 @@ static char *replay_find_nearest_snapshot(int64_t icount,
*snapshot_icount = -1;
- bs = bdrv_all_find_vmstate_bs(false, NULL, NULL);
+ bs = bdrv_all_find_vmstate_bs(NULL, false, NULL, NULL);
if (!bs) {
goto fail;
}
diff --git a/tests/qemu-iotests/267.out b/tests/qemu-iotests/267.out
index 6149029b25..7176e376e1 100644
--- a/tests/qemu-iotests/267.out
+++ b/tests/qemu-iotests/267.out
@@ -6,11 +6,11 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=134217728
Testing:
QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0
-Error: No block device supports snapshots
+Error: no block device can store vmstate for snapshot
(qemu) info snapshots
-No block device supports snapshots
+no block device can store vmstate for snapshot
(qemu) loadvm snap0
-Error: No block device supports snapshots
+Error: no block device can store vmstate for snapshot
(qemu) quit
@@ -22,7 +22,7 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0
Error: Device 'none0' is writable but does not support snapshots
(qemu) info snapshots
-No block device supports snapshots
+no block device can store vmstate for snapshot
(qemu) loadvm snap0
Error: Device 'none0' is writable but does not support snapshots
(qemu) quit
@@ -58,7 +58,7 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0
Error: Device 'virtio0' is writable but does not support snapshots
(qemu) info snapshots
-No block device supports snapshots
+no block device can store vmstate for snapshot
(qemu) loadvm snap0
Error: Device 'virtio0' is writable but does not support snapshots
(qemu) quit
@@ -83,7 +83,7 @@ QEMU X.Y.Z monitor - type 'help' for more information
(qemu) savevm snap0
Error: Device 'file' is writable but does not support snapshots
(qemu) info snapshots
-No block device supports snapshots
+no block device can store vmstate for snapshot
(qemu) loadvm snap0
Error: Device 'file' is writable but does not support snapshots
(qemu) quit
--
2.29.2
- [PATCH v11 00/12] migration: bring improved savevm/loadvm/delvm to QMP, Daniel P . Berrangé, 2021/02/04
- [PATCH v11 01/12] block: push error reporting into bdrv_all_*_snapshot functions, Daniel P . Berrangé, 2021/02/04
- [PATCH v11 02/12] migration: Make save_snapshot() return bool, not 0/-1, Daniel P . Berrangé, 2021/02/04
- [PATCH v11 03/12] migration: stop returning errno from load_snapshot(), Daniel P . Berrangé, 2021/02/04
- [PATCH v11 04/12] block: add ability to specify list of blockdevs during snapshot, Daniel P . Berrangé, 2021/02/04
- [PATCH v11 05/12] block: allow specifying name of block device for vmstate storage,
Daniel P . Berrangé <=
- [PATCH v11 06/12] block: rename and alter bdrv_all_find_snapshot semantics, Daniel P . Berrangé, 2021/02/04
- [PATCH v11 07/12] migration: control whether snapshots are ovewritten, Daniel P . Berrangé, 2021/02/04
- [PATCH v11 08/12] migration: wire up support for snapshot device selection, Daniel P . Berrangé, 2021/02/04
- [PATCH v11 09/12] migration: introduce a delete_snapshot wrapper, Daniel P . Berrangé, 2021/02/04
- [PATCH v11 10/12] iotests: add support for capturing and matching QMP events, Daniel P . Berrangé, 2021/02/04
- [PATCH v11 11/12] iotests: fix loading of common.config from tests/ subdir, Daniel P . Berrangé, 2021/02/04
- [PATCH v11 12/12] migration: introduce snapshot-{save, load, delete} QMP commands, Daniel P . Berrangé, 2021/02/04