[PATCH 0/5] qemu: Allow snapshots and blockcopy of read-only disks

First one doesn't make much sense but oVirt used it before, so we should allow it now as well. Block copy makes sense and thus should be fixed either way. Last patch is for actually validating that it works. Peter Krempa (5): storage_file: create: Create new images with write permission bit qemuBlockStorageSourceCreateFormat: Force write access when formatting images qemu: snapshot: Allow snapshots of read-only disks when we can create them qemu: blockcopy: Allow copy of read-only disks with -blockdev HACK: qemu: caps: enable blockdev reopen src/qemu/qemu_block.c | 12 ++++++++++++ src/qemu/qemu_blockjob.c | 5 +++++ src/qemu/qemu_capabilities.c | 1 + src/qemu/qemu_driver.c | 11 ++++++++++- src/qemu/qemu_monitor_json.c | 2 +- src/storage/storage_file_fs.c | 6 +----- src/storage/storage_file_gluster.c | 6 +----- tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml | 1 + 23 files changed, 47 insertions(+), 12 deletions(-) -- 2.26.2

The 'Create' API of the two storage file backends is used only on code-paths where we need to format the image after creating an empty file. Since the DAC security driver only modifies the owner of the file and not the mode we need to create all files which are going to be formatted with the write bit set for the user. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/storage/storage_file_fs.c | 6 +----- src/storage/storage_file_gluster.c | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/storage/storage_file_fs.c b/src/storage/storage_file_fs.c index 0d3f134765..8aafd58992 100644 --- a/src/storage/storage_file_fs.c +++ b/src/storage/storage_file_fs.c @@ -84,13 +84,9 @@ virStorageFileBackendFileInit(virStorageSourcePtr src) static int virStorageFileBackendFileCreate(virStorageSourcePtr src) { - mode_t mode = S_IRUSR; VIR_AUTOCLOSE fd = -1; - if (!src->readonly) - mode |= S_IWUSR; - - if ((fd = virFileOpenAs(src->path, O_WRONLY | O_TRUNC | O_CREAT, mode, + if ((fd = virFileOpenAs(src->path, O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR, src->drv->uid, src->drv->gid, 0)) < 0) { errno = -fd; return -1; diff --git a/src/storage/storage_file_gluster.c b/src/storage/storage_file_gluster.c index f389a94437..608f93d2f6 100644 --- a/src/storage/storage_file_gluster.c +++ b/src/storage/storage_file_gluster.c @@ -152,13 +152,9 @@ virStorageFileBackendGlusterCreate(virStorageSourcePtr src) { virStorageFileBackendGlusterPrivPtr priv = src->drv->priv; glfs_fd_t *fd = NULL; - mode_t mode = S_IRUSR; - - if (!src->readonly) - mode |= S_IWUSR; if (!(fd = glfs_creat(priv->vol, src->path, - O_CREAT | O_TRUNC | O_WRONLY, mode))) + O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR))) return -1; ignore_value(glfs_close(fd)); -- 2.26.2

On a Monday in 2020, Peter Krempa wrote:
The 'Create' API of the two storage file backends is used only on code-paths where we need to format the image after creating an empty file. Since the DAC security driver only modifies the owner of the file and not the mode we need to create all files which are going to be formatted with the write bit set for the user.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/storage/storage_file_fs.c | 6 +----- src/storage/storage_file_gluster.c | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

We need qemu to be able to write the newly created images so that it can format them to the specified storage format. Force write access by relabelling the images when formatting. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_block.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index d32277d7fd..6f9c7071c9 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -2671,6 +2671,12 @@ qemuBlockStorageSourceCreate(virDomainObjPtr vm, return -1; } + /* grant write access to read-only images during formatting */ + if (src->readonly && + qemuDomainStorageSourceAccessAllow(priv->driver, vm, src, false, + false, true) < 0) + return -1; + if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0) goto cleanup; @@ -2697,6 +2703,12 @@ qemuBlockStorageSourceCreate(virDomainObjPtr vm, asyncJob) < 0) goto cleanup; + /* revoke write access to read-only images during formatting */ + if (src->readonly && + qemuDomainStorageSourceAccessAllow(priv->driver, vm, src, true, + false, true) < 0) + goto cleanup; + if (qemuDomainObjEnterMonitorAsync(priv->driver, vm, asyncJob) < 0) goto cleanup; -- 2.26.2

On a Monday in 2020, Peter Krempa wrote:
We need qemu to be able to write the newly created images so that it can format them to the specified storage format.
Force write access by relabelling the images when formatting.
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_block.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

With -blockdev or when reusing externally created images and thus without the need for formatting the image we actually can support snapshots of read-only disks. Arguably it's not very useful so they are not done by default but users of libvirt such as oVirt are actually using this. https://bugzilla.redhat.com/show_bug.cgi?id=1832204 Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 1c7c87128d..29d964f1e8 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -14683,7 +14683,7 @@ qemuDomainSnapshotPrepareDiskExternal(virDomainDiskDefPtr disk, int err; int rc; - if (disk->src->readonly) { + if (disk->src->readonly && !(reuse || blockdev)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("external snapshot for readonly disk %s " "is not supported"), disk->dst); -- 2.26.2

On a Monday in 2020, Peter Krempa wrote:
With -blockdev or when reusing externally created images and thus without the need for formatting the image we actually can support snapshots of read-only disks. Arguably it's not very useful so they are not done by default but users of libvirt such as oVirt are actually using this.
https://bugzilla.redhat.com/show_bug.cgi?id=1832204
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

'blockdev-mirror' requires the write permission internally to do the copy. This means that we have to force the image to be read-write for the duration of the copy and can fix it after the copy is done. https://bugzilla.redhat.com/show_bug.cgi?id=1832204 Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_blockjob.c | 5 +++++ src/qemu/qemu_driver.c | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index b9eecd3f98..e51499532f 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -1282,6 +1282,7 @@ qemuBlockJobProcessEventConcludedCopyPivot(virQEMUDriverPtr driver, qemuBlockJobDataPtr job, qemuDomainAsyncJob asyncJob) { + qemuDomainObjPrivatePtr priv = vm->privateData; VIR_DEBUG("copy job '%s' on VM '%s' pivoted", job->name, vm->def->name); /* mirror may be NULL for copy job corresponding to migration */ @@ -1297,6 +1298,10 @@ qemuBlockJobProcessEventConcludedCopyPivot(virQEMUDriverPtr driver, !virStorageSourceIsBacking(job->disk->mirror->backingStore)) job->disk->mirror->backingStore = g_steal_pointer(&job->disk->src->backingStore); + if (job->disk->src->readonly && + virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) + ignore_value(qemuBlockReopenReadOnly(vm, job->disk->mirror, asyncJob)); + qemuBlockJobRewriteConfigDiskSource(vm, job->disk, job->disk->mirror); qemuBlockJobEventProcessConcludedRemoveChain(driver, vm, asyncJob, job->disk->src); diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 29d964f1e8..1c73604249 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -18110,6 +18110,15 @@ qemuDomainBlockCopyCommon(virDomainObjPtr vm, keepParentLabel) < 0) goto endjob; + if (mirror->readonly) { + if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV_REOPEN)) { + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", + _("copy of read-only disks is not supported")); + goto endjob; + } + mirror->readonly = false; + } + /* we must initialize XML-provided chain prior to detecting to keep semantics * with VM startup */ if (blockdev) { -- 2.26.2

On a Monday in 2020, Peter Krempa wrote:
'blockdev-mirror' requires the write permission internally to do the copy. This means that we have to force the image to be read-write for the duration of the copy and can fix it after the copy is done.
https://bugzilla.redhat.com/show_bug.cgi?id=1832204
Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_blockjob.c | 5 +++++ src/qemu/qemu_driver.c | 9 +++++++++ 2 files changed, 14 insertions(+)
Reviewed-by: Ján Tomko <jtomko@redhat.com> Jano

This patch is meant for testing. --- src/qemu/qemu_capabilities.c | 1 + src/qemu/qemu_monitor_json.c | 2 +- tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml | 1 + 18 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 2c6e36685e..c953f7d8da 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -1455,6 +1455,7 @@ static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsNVDIMM[] = { /* see documentation for virQEMUQAPISchemaPathGet for the query format */ static struct virQEMUCapsStringFlags virQEMUCapsQMPSchemaQueries[] = { + { "x-blockdev-reopen/arg-type", QEMU_CAPS_BLOCKDEV_REOPEN }, { "blockdev-add/arg-type/options/+gluster/debug-level", QEMU_CAPS_GLUSTER_DEBUG_LEVEL}, { "blockdev-add/arg-type/+gluster/debug", QEMU_CAPS_GLUSTER_DEBUG_LEVEL}, { "blockdev-add/arg-type/+vxhs", QEMU_CAPS_VXHS}, diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 619717eae5..fc9908db0d 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -8839,7 +8839,7 @@ qemuMonitorJSONBlockdevReopen(qemuMonitorPtr mon, g_autoptr(virJSONValue) reply = NULL; virJSONValuePtr pr = g_steal_pointer(props); - if (!(cmd = qemuMonitorJSONMakeCommandInternal("blockdev-reopen", pr))) + if (!(cmd = qemuMonitorJSONMakeCommandInternal("x-blockdev-reopen", pr))) return -1; if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml index 2e8460f829..1d20487bc4 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml @@ -169,6 +169,7 @@ <flag name='ramfb'/> <flag name='arm-max-cpu'/> <flag name='drive-nvme'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='tcg'/> <version>4000000</version> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml index 978fad0ba6..d9ccdf0cd2 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml @@ -174,6 +174,7 @@ <flag name='machine.pseries.cap-ccf-assist'/> <flag name='drive-nvme'/> <flag name='i8042'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='machine.pseries.cap-cfpc'/> <flag name='machine.pseries.cap-sbbc'/> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml b/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml index 4322ca3593..e87a248df0 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml @@ -170,6 +170,7 @@ <flag name='bochs-display'/> <flag name='migration-file-drop-cache'/> <flag name='drive-nvme'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='tcg'/> <version>4000000</version> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml index 8df0e1eb79..fe7f3409eb 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml @@ -170,6 +170,7 @@ <flag name='bochs-display'/> <flag name='migration-file-drop-cache'/> <flag name='drive-nvme'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='tcg'/> <version>4000000</version> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml index 60d3a942be..9533961c1f 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml @@ -136,6 +136,7 @@ <flag name='query-cpu-model-baseline'/> <flag name='query-cpu-model-comparison'/> <flag name='drive-nvme'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='tcg'/> <version>4000000</version> diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml index 4285bec2bf..28679974d6 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml @@ -211,6 +211,7 @@ <flag name='ramfb'/> <flag name='drive-nvme'/> <flag name='i8042'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='tcg'/> <version>4000000</version> diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml index 1c960faa6c..cb0566b0b7 100644 --- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml @@ -217,6 +217,7 @@ <flag name='drive-nvme'/> <flag name='smp-dies'/> <flag name='i8042'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='tcg'/> <version>4001000</version> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml index 418b5937a0..b05e298380 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml @@ -179,6 +179,7 @@ <flag name='rng-builtin'/> <flag name='virtio-net.failover'/> <flag name='vhost-user-fs'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml index 796ed0a2bc..601ab732bc 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml @@ -179,6 +179,7 @@ <flag name='smp-dies'/> <flag name='i8042'/> <flag name='rng-builtin'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='machine.pseries.cap-cfpc'/> <flag name='machine.pseries.cap-sbbc'/> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml index 4c0908294a..c982058412 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml @@ -144,6 +144,7 @@ <flag name='rng-builtin'/> <flag name='virtio-net.failover'/> <flag name='vhost-user-fs'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml index 0d4d6e71d5..44f5b5b661 100644 --- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml @@ -223,6 +223,7 @@ <flag name='rng-builtin'/> <flag name='virtio-net.failover'/> <flag name='vhost-user-fs'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml index 1f743aaa11..de0635328f 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml @@ -186,6 +186,7 @@ <flag name='vhost-user-fs'/> <flag name='query-named-block-nodes.flat'/> <flag name='blockdev-snapshot.allow-write-only-overlay'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml index a5f0bb538b..d1734de01e 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml @@ -191,6 +191,7 @@ <flag name='vhost-user-fs'/> <flag name='query-named-block-nodes.flat'/> <flag name='blockdev-snapshot.allow-write-only-overlay'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml index e9651ca581..899dfe2bda 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml @@ -181,6 +181,7 @@ <flag name='vhost-user-fs'/> <flag name='query-named-block-nodes.flat'/> <flag name='blockdev-snapshot.allow-write-only-overlay'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml index f127f38bcc..919e9f141d 100644 --- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml @@ -226,6 +226,7 @@ <flag name='vhost-user-fs'/> <flag name='query-named-block-nodes.flat'/> <flag name='blockdev-snapshot.allow-write-only-overlay'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> diff --git a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml index 9611549bd7..cd6b6ac45f 100644 --- a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml @@ -226,6 +226,7 @@ <flag name='vhost-user-fs'/> <flag name='query-named-block-nodes.flat'/> <flag name='blockdev-snapshot.allow-write-only-overlay'/> + <flag name='blockdev-reopen'/> <flag name='storage.werror'/> <flag name='fsdev.multidevs'/> <flag name='virtio.packed'/> -- 2.26.2

On a Monday in 2020, Peter Krempa wrote:
This patch is meant for testing.
Missing signoff
--- src/qemu/qemu_capabilities.c | 1 + src/qemu/qemu_monitor_json.c | 2 +- tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 + tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.riscv64.xml | 1 + tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 + tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml | 1 + 18 files changed, 18 insertions(+), 1 deletion(-)
Reviewed-by: Ján Tomko <jtomko@redhat.com> and safe for freeze Jano
participants (2)
-
Ján Tomko
-
Peter Krempa