]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemuDomainValidateStorageSource: Allow masking out blockdev support
authorPeter Krempa <pkrempa@redhat.com>
Tue, 5 May 2020 15:00:41 +0000 (17:00 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 12 May 2020 04:55:00 +0000 (06:55 +0200)
In case of 'sd' cards we'll use pre-blockdev code also if qemu supports
blockdev. In that specific case we'll need to mask out blockdev support
for 'sd' disks. Plumb in a boolean to allow it.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_domain.c
src/qemu/qemu_domain.h
src/qemu/qemu_validate.c
tests/qemublocktest.c

index 5cd516c6615ba15625b64a7b1e3c19e578edf8c0..a249442dd215fd85a9050474a1bb8d6a4dd051aa 100644 (file)
@@ -5137,11 +5137,15 @@ qemuDomainValidateActualNetDef(const virDomainNetDef *net,
 
 int
 qemuDomainValidateStorageSource(virStorageSourcePtr src,
-                                virQEMUCapsPtr qemuCaps)
+                                virQEMUCapsPtr qemuCaps,
+                                bool maskBlockdev)
 {
     int actualType = virStorageSourceGetActualType(src);
     bool blockdev = virQEMUCapsGet(qemuCaps, QEMU_CAPS_BLOCKDEV);
 
+    if (maskBlockdev)
+        blockdev = false;
+
     if (src->format == VIR_STORAGE_FILE_COW) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
                       _("'cow' storage format is not supported"));
@@ -8290,7 +8294,7 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
         if (n->format == VIR_STORAGE_FILE_ISO)
             n->format = VIR_STORAGE_FILE_RAW;
 
-        if (qemuDomainValidateStorageSource(n, priv->qemuCaps) < 0)
+        if (qemuDomainValidateStorageSource(n, priv->qemuCaps, false) < 0)
             return -1;
 
         qemuDomainPrepareStorageSourceConfig(n, cfg, priv->qemuCaps);
@@ -13133,7 +13137,7 @@ qemuDomainPrepareDiskSourceLegacy(virDomainDiskDefPtr disk,
                                   qemuDomainObjPrivatePtr priv,
                                   virQEMUDriverConfigPtr cfg)
 {
-    if (qemuDomainValidateStorageSource(disk->src, priv->qemuCaps) < 0)
+    if (qemuDomainValidateStorageSource(disk->src, priv->qemuCaps, true) < 0)
         return -1;
 
     qemuDomainPrepareStorageSourceConfig(disk->src, cfg, priv->qemuCaps);
@@ -13169,7 +13173,7 @@ qemuDomainPrepareStorageSourceBlockdev(virDomainDiskDefPtr disk,
     if (qemuBlockStorageSourceNeedsStorageSliceLayer(src))
         src->sliceStorage->nodename = g_strdup_printf("libvirt-%u-slice-sto", src->id);
 
-    if (qemuDomainValidateStorageSource(src, priv->qemuCaps) < 0)
+    if (qemuDomainValidateStorageSource(src, priv->qemuCaps, false) < 0)
         return -1;
 
     qemuDomainPrepareStorageSourceConfig(src, cfg, priv->qemuCaps);
index 639d27d8a55361a01c37cc3cfdfc89cdf1ce3f8a..ea0fce64a886eedd9362ebd20615543b70c159a1 100644 (file)
@@ -1237,7 +1237,8 @@ qemuDomainPrepareDiskSourceData(virDomainDiskDefPtr disk,
 
 int
 qemuDomainValidateStorageSource(virStorageSourcePtr src,
-                                virQEMUCapsPtr qemuCaps);
+                                virQEMUCapsPtr qemuCaps,
+                                bool maskBlockdev);
 
 
 int
index 63cde01762e62e814419fe93e2374cb62147ef70..a7c918e5fd9909b09506d45461f542eeb289ba75 100644 (file)
@@ -2297,7 +2297,7 @@ qemuValidateDomainDeviceDefDisk(const virDomainDiskDef *disk,
     }
 
     for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
-        if (qemuDomainValidateStorageSource(n, qemuCaps) < 0)
+        if (qemuDomainValidateStorageSource(n, qemuCaps, false) < 0)
             return -1;
     }
 
index b80ee2ae6c956bc0f34fd55c8899329c8e7986fa..82c11311e2de95f1aee0d6a199006b326db479a2 100644 (file)
@@ -294,7 +294,7 @@ testQemuDiskXMLToProps(const void *opaque)
         if (testQemuDiskXMLToJSONFakeSecrets(n) < 0)
             return -1;
 
-        if (qemuDomainValidateStorageSource(n, data->qemuCaps) < 0)
+        if (qemuDomainValidateStorageSource(n, data->qemuCaps, false) < 0)
             return -1;
 
         qemuDomainPrepareDiskSourceData(disk, n);
@@ -529,7 +529,7 @@ testQemuImageCreate(const void *opaque)
     src->capacity = UINT_MAX * 2ULL;
     src->physical = UINT_MAX + 1ULL;
 
-    if (qemuDomainValidateStorageSource(src, data->qemuCaps) < 0)
+    if (qemuDomainValidateStorageSource(src, data->qemuCaps, false) < 0)
         return -1;
 
     if (qemuBlockStorageSourceCreateGetStorageProps(src, &protocolprops) < 0)