[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