From 35e3069ce481d6d9fc54917b30a0f6ea7880608a Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 27 May 2019 17:30:12 +0200 Subject: [PATCH] qemu: block: Split up qemuBlockStorageSourceAttachApply MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Split up the addition of a storage source into the following sub-steps: 1) storage access dependencies (TLS transport, persistent reservation) 2) storage acccess node (file/gluster/nbd...) 3) format driver dependencies (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 dependencies plugged in first, then blockdev-create will be called and after that successfully finishes blockdev-add will be added. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- src/qemu/qemu_block.c | 116 ++++++++++++++++++++++++++++-------------- 1 file changed, 78 insertions(+), 38 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,6 +1450,80 @@ qemuBlockStorageSourceAttachPrepareBlockdev(virStorageSourcePtr src) } +static int +qemuBlockStorageSourceAttachApplyStorageDeps(qemuMonitorPtr mon, + qemuBlockStorageSourceAttachDataPtr data) +{ + if (data->prmgrProps && + qemuMonitorAddObject(mon, &data->prmgrProps, &data->prmgrAlias) < 0) + return -1; + + if (data->authsecretProps && + qemuMonitorAddObject(mon, &data->authsecretProps, + &data->authsecretAlias) < 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; + + if (rv < 0) + return -1; + + 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; + + if (rv < 0) + return -1; + + data->formatAttached = true; + } + + return 0; +} + + /** * qemuBlockStorageSourceAttachApply: * @mon: monitor object @@ -1467,46 +1541,12 @@ int qemuBlockStorageSourceAttachApply(qemuMonitorPtr mon, qemuBlockStorageSourceAttachDataPtr data) { - int rv; - - if (data->prmgrProps && - qemuMonitorAddObject(mon, &data->prmgrProps, &data->prmgrAlias) < 0) + if (qemuBlockStorageSourceAttachApplyStorageDeps(mon, data) < 0 || + qemuBlockStorageSourceAttachApplyStorage(mon, data) < 0 || + qemuBlockStorageSourceAttachApplyFormatDeps(mon, data) < 0 || + qemuBlockStorageSourceAttachApplyFormat(mon, data) < 0) return -1; - if (data->authsecretProps && - qemuMonitorAddObject(mon, &data->authsecretProps, - &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; - - if (data->storageProps) { - rv = qemuMonitorBlockdevAdd(mon, data->storageProps); - data->storageProps = NULL; - - if (rv < 0) - return -1; - - data->storageAttached = true; - } - - if (data->formatProps) { - rv = qemuMonitorBlockdevAdd(mon, data->formatProps); - data->formatProps = NULL; - - if (rv < 0) - return -1; - - data->formatAttached = true; - } - if (data->driveCmd) { if (qemuMonitorAddDrive(mon, data->driveCmd) < 0) return -1;