[libvirt] [PATCH 4/4] qemu: block: Split up qemuBlockStorageSourceAttachApply

Peter Krempa pkrempa at redhat.com
Thu Jul 11 14:56:05 UTC 2019


Split up the addition of a storage source into the following sub-steps:
1) storage access dependancies (TLS transport, persistent reservation)
2) storage acccess node (file/gluster/nbd...)
3) format driver dependancies (encryption secret)
4) format driver node (qcow2, raw, ...)

The functions split out will be later reused when implementing support
for 'blockdev-create' as we'll need the dependancies plugged in first,
then blockdev-create will be called and after that successfully finishes
blockdev-add will be added.

Signed-off-by: Peter Krempa <pkrempa at redhat.com>
---
 src/qemu/qemu_block.c | 86 +++++++++++++++++++++++++++++++------------
 1 file changed, 63 insertions(+), 23 deletions(-)

diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
index 0a6522577d..8641e2011c 100644
--- a/src/qemu/qemu_block.c
+++ b/src/qemu/qemu_block.c
@@ -1450,25 +1450,10 @@ qemuBlockStorageSourceAttachPrepareBlockdev(virStorageSourcePtr src)
 }


-/**
- * qemuBlockStorageSourceAttachApply:
- * @mon: monitor object
- * @data: structure holding data of block device to apply
- *
- * Attaches a virStorageSource definition converted to
- * qemuBlockStorageSourceAttachData to a running VM. This function expects being
- * called after the monitor was entered.
- *
- * Returns 0 on success and -1 on error with a libvirt error reported. If an
- * error occurred, changes which were already applied need to be rolled back by
- * calling qemuBlockStorageSourceAttachRollback.
- */
-int
-qemuBlockStorageSourceAttachApply(qemuMonitorPtr mon,
-                                  qemuBlockStorageSourceAttachDataPtr data)
+static int
+qemuBlockStorageSourceAttachApplyStorageDeps(qemuMonitorPtr mon,
+                                             qemuBlockStorageSourceAttachDataPtr data)
 {
-    int rv;
-
     if (data->prmgrProps &&
         qemuMonitorAddObject(mon, &data->prmgrProps, &data->prmgrAlias) < 0)
         return -1;
@@ -1478,15 +1463,20 @@ qemuBlockStorageSourceAttachApply(qemuMonitorPtr mon,
                              &data->authsecretAlias) < 0)
         return -1;

-    if (data->encryptsecretProps &&
-        qemuMonitorAddObject(mon, &data->encryptsecretProps,
-                             &data->encryptsecretAlias) < 0)
-        return -1;
-
     if (data->tlsProps &&
         qemuMonitorAddObject(mon, &data->tlsProps, &data->tlsAlias) < 0)
         return -1;

+    return 0;
+}
+
+
+static int
+qemuBlockStorageSourceAttachApplyStorage(qemuMonitorPtr mon,
+                                         qemuBlockStorageSourceAttachDataPtr data)
+{
+    int rv;
+
     if (data->storageProps) {
         rv = qemuMonitorBlockdevAdd(mon, data->storageProps);
         data->storageProps = NULL;
@@ -1497,6 +1487,29 @@ qemuBlockStorageSourceAttachApply(qemuMonitorPtr mon,
         data->storageAttached = true;
     }

+    return 0;
+}
+
+
+static int
+qemuBlockStorageSourceAttachApplyFormatDeps(qemuMonitorPtr mon,
+                                            qemuBlockStorageSourceAttachDataPtr data)
+{
+    if (data->encryptsecretProps &&
+        qemuMonitorAddObject(mon, &data->encryptsecretProps,
+                             &data->encryptsecretAlias) < 0)
+        return -1;
+
+    return 0;
+}
+
+
+static int
+qemuBlockStorageSourceAttachApplyFormat(qemuMonitorPtr mon,
+                                        qemuBlockStorageSourceAttachDataPtr data)
+{
+    int rv;
+
     if (data->formatProps) {
         rv = qemuMonitorBlockdevAdd(mon, data->formatProps);
         data->formatProps = NULL;
@@ -1507,6 +1520,33 @@ qemuBlockStorageSourceAttachApply(qemuMonitorPtr mon,
         data->formatAttached = true;
     }

+    return 0;
+}
+
+
+/**
+ * qemuBlockStorageSourceAttachApply:
+ * @mon: monitor object
+ * @data: structure holding data of block device to apply
+ *
+ * Attaches a virStorageSource definition converted to
+ * qemuBlockStorageSourceAttachData to a running VM. This function expects being
+ * called after the monitor was entered.
+ *
+ * Returns 0 on success and -1 on error with a libvirt error reported. If an
+ * error occurred, changes which were already applied need to be rolled back by
+ * calling qemuBlockStorageSourceAttachRollback.
+ */
+int
+qemuBlockStorageSourceAttachApply(qemuMonitorPtr mon,
+                                  qemuBlockStorageSourceAttachDataPtr data)
+{
+    if (qemuBlockStorageSourceAttachApplyStorageDeps(mon, data) < 0 ||
+        qemuBlockStorageSourceAttachApplyStorage(mon, data) < 0 ||
+        qemuBlockStorageSourceAttachApplyFormatDeps(mon, data) < 0 ||
+        qemuBlockStorageSourceAttachApplyFormat(mon, data) < 0)
+        return -1;
+
     if (data->driveCmd) {
         if (qemuMonitorAddDrive(mon, data->driveCmd) < 0)
             return -1;
-- 
2.21.0




More information about the libvir-list mailing list