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(a)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