``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 supported in vmx hypervisor
+ (: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
}
}
- 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) {
}
+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)"),
+ disk->dst);
+ return -1;
+ }
+
+ return 0;
+}
+
+
int
qemuValidateDomainDeviceDefDisk(const virDomainDiskDef *disk,
const virDomainDef *def,
if (qemuValidateDomainDeviceDefDiskBlkdeviotune(disk, def, qemuCaps) < 0)
return -1;
+ if (qemuValidateDomainDeviceDefDiskTransient(disk, qemuCaps) < 0)
+ return -1;
+
if (disk->src->shared && !disk->src->readonly &&
!qemuBlockStorageSourceSupportsConcurrentAccess(disk->src)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,