[PATCH 14/20] qemuDomainValidateStorageSource: Allow masking out blockdev support

Peter Krempa pkrempa at redhat.com
Wed May 6 12:08:29 UTC 2020


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 at redhat.com>
---
 src/qemu/qemu_domain.c   | 12 ++++++++----
 src/qemu/qemu_domain.h   |  3 ++-
 src/qemu/qemu_validate.c |  2 +-
 tests/qemublocktest.c    |  4 ++--
 4 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index e76a76021e..01f2792401 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -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"));
@@ -8294,7 +8298,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);
@@ -13137,7 +13141,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);
@@ -13173,7 +13177,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);
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 639d27d8a5..ea0fce64a8 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -1237,7 +1237,8 @@ qemuDomainPrepareDiskSourceData(virDomainDiskDefPtr disk,

 int
 qemuDomainValidateStorageSource(virStorageSourcePtr src,
-                                virQEMUCapsPtr qemuCaps);
+                                virQEMUCapsPtr qemuCaps,
+                                bool maskBlockdev);


 int
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 63cde01762..a7c918e5fd 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -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;
     }

diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index b80ee2ae6c..82c11311e2 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -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)
-- 
2.26.2




More information about the libvir-list mailing list