[libvirt] [PATCH RFC 04/40] qemu: domain: Split out setup of virStorageSource from qemu driver config

Peter Krempa pkrempa at redhat.com
Fri Oct 18 16:10:49 UTC 2019


qemuDomainPrepareDiskSourceData historically prepared everything but
we'we split out the majority of the functionality so that it sets up
predominantely only according to the configuration of the disk. There
was one leftover bit of setting the gluster debug level from the config.

Split this out into a separate function so that
qemuDomainPrepareDiskSourceData only perpares based on the disk.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_domain.c | 51 +++++++++++++++++++++++++++++-------------
 src/qemu/qemu_domain.h |  4 +---
 tests/qemublocktest.c  |  2 +-
 3 files changed, 38 insertions(+), 19 deletions(-)

diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index a97bf65e7f..6a93dd5293 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -10251,6 +10251,32 @@ qemuDomainStorageSourceValidateDepth(virStorageSourcePtr src,
 }


+/**
+ * qemuDomainPrepareStorageSourceConfig:
+ * @src: storage source to configure
+ * @cfg: qemu driver config object
+ * @qemuCaps: capabilities of qemu
+ *
+ * Set properties of @src based on the qemu driver config @cfg.
+ *
+ */
+static void
+qemuDomainPrepareStorageSourceConfig(virStorageSourcePtr src,
+                                     virQEMUDriverConfigPtr cfg,
+                                     virQEMUCapsPtr qemuCaps)
+{
+    if (!cfg)
+        return;
+
+    if (src->type == VIR_STORAGE_TYPE_NETWORK &&
+        src->protocol == VIR_STORAGE_NET_PROTOCOL_GLUSTER &&
+        virQEMUCapsGet(qemuCaps, QEMU_CAPS_GLUSTER_DEBUG_LEVEL)) {
+        src->debug = true;
+        src->debugLevel = cfg->glusterDebugLevel;
+    }
+}
+
+
 /**
  * qemuDomainDetermineDiskChain:
  * @driver: qemu driver object
@@ -10356,7 +10382,9 @@ qemuDomainDetermineDiskChain(virQEMUDriverPtr driver,
         if (qemuDomainValidateStorageSource(n, priv->qemuCaps) < 0)
             return -1;

-        if (qemuDomainPrepareDiskSourceData(disk, n, cfg, priv->qemuCaps) < 0)
+        qemuDomainPrepareStorageSourceConfig(n, cfg, priv->qemuCaps);
+
+        if (qemuDomainPrepareDiskSourceData(disk, n) < 0)
             return -1;

         if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_BLOCKDEV) &&
@@ -15060,7 +15088,6 @@ qemuDomainCheckCCWS390AddressSupport(const virDomainDef *def,
  *
  * @disk: Disk config object
  * @src: source to start from
- * @cfg: qemu driver config object
  *
  * Prepares various aspects of a storage source belonging to a disk backing
  * chain. This function should be also called for detected backing chain
@@ -15068,22 +15095,12 @@ qemuDomainCheckCCWS390AddressSupport(const virDomainDef *def,
  */
 int
 qemuDomainPrepareDiskSourceData(virDomainDiskDefPtr disk,
-                                virStorageSourcePtr src,
-                                virQEMUDriverConfigPtr cfg,
-                                virQEMUCapsPtr qemuCaps)
+                                virStorageSourcePtr src)
 {
     /* transfer properties valid only for the top level image */
     if (src == disk->src)
         src->detect_zeroes = disk->detect_zeroes;

-    if (cfg &&
-        src->type == VIR_STORAGE_TYPE_NETWORK &&
-        src->protocol == VIR_STORAGE_NET_PROTOCOL_GLUSTER &&
-        virQEMUCapsGet(qemuCaps, QEMU_CAPS_GLUSTER_DEBUG_LEVEL)) {
-        src->debug = true;
-        src->debugLevel = cfg->glusterDebugLevel;
-    }
-
     /* transfer properties valid for the full chain */
     src->iomode = disk->iomode;
     src->cachemode = disk->cachemode;
@@ -15144,7 +15161,9 @@ qemuDomainPrepareDiskSourceLegacy(virDomainDiskDefPtr disk,
     if (qemuDomainValidateStorageSource(disk->src, priv->qemuCaps) < 0)
         return -1;

-    if (qemuDomainPrepareDiskSourceData(disk, disk->src, cfg, priv->qemuCaps) < 0)
+    qemuDomainPrepareStorageSourceConfig(disk->src, cfg, priv->qemuCaps);
+
+    if (qemuDomainPrepareDiskSourceData(disk, disk->src) < 0)
         return -1;

     if (qemuDomainSecretStorageSourcePrepare(priv, disk->src,
@@ -15178,7 +15197,9 @@ qemuDomainPrepareStorageSourceBlockdev(virDomainDiskDefPtr disk,
     if (qemuDomainValidateStorageSource(src, priv->qemuCaps) < 0)
         return -1;

-    if (qemuDomainPrepareDiskSourceData(disk, src, cfg, priv->qemuCaps) < 0)
+    qemuDomainPrepareStorageSourceConfig(src, cfg, priv->qemuCaps);
+
+    if (qemuDomainPrepareDiskSourceData(disk, src) < 0)
         return -1;

     if (qemuDomainSecretStorageSourcePrepare(priv, src,
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index d703417862..14367f7320 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -1169,9 +1169,7 @@ qemuDomainCheckCCWS390AddressSupport(const virDomainDef *def,

 int
 qemuDomainPrepareDiskSourceData(virDomainDiskDefPtr disk,
-                                virStorageSourcePtr src,
-                                virQEMUDriverConfigPtr cfg,
-                                virQEMUCapsPtr qemuCaps)
+                                virStorageSourcePtr src)
     G_GNUC_WARN_UNUSED_RESULT;


diff --git a/tests/qemublocktest.c b/tests/qemublocktest.c
index 0f073682ca..9b7abceb40 100644
--- a/tests/qemublocktest.c
+++ b/tests/qemublocktest.c
@@ -223,7 +223,7 @@ testQemuDiskXMLToProps(const void *opaque)
         if (qemuDomainValidateStorageSource(n, data->qemuCaps) < 0)
             goto cleanup;

-        if (qemuDomainPrepareDiskSourceData(disk, n, NULL, data->qemuCaps) < 0)
+        if (qemuDomainPrepareDiskSourceData(disk, n) < 0)
             goto cleanup;

         if (!(formatProps = qemuBlockStorageSourceGetBlockdevProps(n, n->backingStore)) ||
-- 
2.21.0




More information about the libvir-list mailing list