[PATCH v4 09/11] qemu: validate: Allow <transient/> disks
Ján Tomko
jtomko at redhat.com
Fri Sep 25 17:25:33 UTC 2020
On a Thursday in 2020, Peter Krempa wrote:
>From: Masayoshi Mizuma <m.mizuma at jp.fujitsu.com>
>
>Extract the validation of transient disk option. We support transient
>disks in qemu under the following conditions:
>
> - -blockdev is used
> - the disk source is a local file
> - the disk type is 'disk'
> - the disk is not readonly
>
>Signed-off-by: Masayoshi Mizuma <m.mizuma at jp.fujitsu.com>
>Signed-off-by: Peter Krempa <pkrempa at redhat.com>
>---
> docs/formatdomain.rst | 5 ++--
> src/qemu/qemu_validate.c | 56 +++++++++++++++++++++++++++++++++++-----
> 2 files changed, 53 insertions(+), 8 deletions(-)
>
>diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst
>index 888db5ea29..cc1467c0e6 100644
>--- a/docs/formatdomain.rst
>+++ b/docs/formatdomain.rst
>@@ -2974,8 +2974,9 @@ paravirtualized driver is specified via the ``disk`` element.
> ``transient``
> If present, this indicates that changes to the device contents should be
> reverted automatically when the guest exits. With some hypervisors, marking a
>- disk transient prevents the domain from participating in migration or
>- snapshots. Only suppported in vmx hypervisor. :since:`Since 0.9.5`
>+ disk transient prevents the domain from participating in migration,
>+ snapshots, or blockjobs. Only suppported in vmx hypervisor
I'd say:
*supported
but that's pre-existing.
>+ (:since:`Since 0.9.5`) and ``qemu`` hypervisor (:since:`Since 6.9.0`).
> ``serial``
> If present, this specify serial number of virtual hard drive. For example, it
> may look like ``<serial>WD-WMAP9A966149</serial>``. Not supported for
>diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
>index 3ed4039cdf..3196814aca 100644
>--- a/src/qemu/qemu_validate.c
>+++ b/src/qemu/qemu_validate.c
>@@ -2186,12 +2186,6 @@ qemuValidateDomainDeviceDefDiskFrontend(const virDomainDiskDef *disk,
> }
> }
>
>- if (disk->transient) {
>- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>- _("transient disks not supported yet"));
>- return -1;
>- }
>-
> if (disk->iomode == VIR_DOMAIN_DISK_IO_NATIVE &&
> disk->cachemode != VIR_DOMAIN_DISK_CACHE_DIRECTSYNC &&
> disk->cachemode != VIR_DOMAIN_DISK_CACHE_DISABLE) {
>@@ -2340,6 +2334,53 @@ qemuValidateDomainDeviceDefDiskBlkdeviotune(const virDomainDiskDef *disk,
> }
>
>
>+static int
>+qemuValidateDomainDeviceDefDiskTransient(const virDomainDiskDef *disk,
>+ virQEMUCapsPtr qemuCaps)
>+
>+{
>+ virStorageType actualType = virStorageSourceGetActualType(disk->src);
>+
>+ if (!disk->transient)
>+ return 0;
>+
>+ if (virStorageSourceIsEmpty(disk->src)) {
>+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>+ _("transient disk '%s' must not be empty"), disk->dst);
>+ return -1;
>+ }
>+
>+ if (disk->src->readonly) {
>+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>+ _("transient disk '%s' must not be read-only"), disk->dst);
>+ return -1;
>+ }
>+
>+ if (actualType != VIR_STORAGE_TYPE_FILE) {
>+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>+ _("transient disk supported only with 'file' type (%s)"),
>+ disk->dst);
>+ return -1;
>+ }
>+
>+ if (disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) {
>+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>+ _("transient disk supported only with 'disk' device (%s)"),
>+ disk->dst);
>+ return -1;
>+ }
>+
>+ if (qemuCaps && !virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV)) {
>+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>+ _("transient disk not supported by this qemu binary (%s)"),
s/qemu/QEMU/
Jano
>+ disk->dst);
>+ return -1;
>+ }
>+
>+ return 0;
>+}
>+
>+
> int
> qemuValidateDomainDeviceDefDisk(const virDomainDiskDef *disk,
> const virDomainDef *def,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20200925/1f3b8f96/attachment-0001.sig>
More information about the libvir-list
mailing list