提交 5fdb20d7 编写于 作者: P Peter Krempa

qemu: command: Use storage chain helpers in commandline generator

Replace the open-coded local implementation with
qemuBuildStorageSourceChainAttachPrepare(Drive|Blockdev).
Signed-off-by: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NJán Tomko <jtomko@redhat.com>
上级 042c95bd
...@@ -2559,11 +2559,8 @@ qemuBuildDiskSourceCommandLine(virCommandPtr cmd, ...@@ -2559,11 +2559,8 @@ qemuBuildDiskSourceCommandLine(virCommandPtr cmd,
virDomainDiskDefPtr disk, virDomainDiskDefPtr disk,
virQEMUCapsPtr qemuCaps) virQEMUCapsPtr qemuCaps)
{ {
qemuBlockStorageSourceAttachDataPtr *data = NULL; VIR_AUTOPTR(qemuBlockStorageSourceChainData) data = NULL;
size_t ndata = 0;
VIR_AUTOPTR(qemuBlockStorageSourceAttachData) tmp = NULL;
virJSONValuePtr copyOnReadProps = NULL; virJSONValuePtr copyOnReadProps = NULL;
virStorageSourcePtr n;
char *str = NULL; char *str = NULL;
size_t i; size_t i;
int ret = -1; int ret = -1;
...@@ -2574,35 +2571,21 @@ qemuBuildDiskSourceCommandLine(virCommandPtr cmd, ...@@ -2574,35 +2571,21 @@ qemuBuildDiskSourceCommandLine(virCommandPtr cmd,
goto cleanup; goto cleanup;
} }
for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) { if (!(data = qemuBuildStorageSourceChainAttachPrepareBlockdev(disk->src,
if (!(tmp = qemuBlockStorageSourceAttachPrepareBlockdev(n))) qemuCaps)))
goto cleanup; goto cleanup;
if (qemuBuildStorageSourceAttachPrepareCommon(n, tmp, qemuCaps) < 0)
goto cleanup;
if (VIR_APPEND_ELEMENT(data, ndata, tmp) < 0)
goto cleanup;
}
if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON && if (disk->copy_on_read == VIR_TRISTATE_SWITCH_ON &&
!(copyOnReadProps = qemuBlockStorageGetCopyOnReadProps(disk))) !(copyOnReadProps = qemuBlockStorageGetCopyOnReadProps(disk)))
goto cleanup; goto cleanup;
} else { } else {
if (!(tmp = qemuBuildStorageSourceAttachPrepareDrive(disk, qemuCaps))) if (!(data = qemuBuildStorageSourceChainAttachPrepareDrive(disk, qemuCaps)))
goto cleanup;
if (qemuBuildStorageSourceAttachPrepareCommon(disk->src, tmp,
qemuCaps) < 0)
goto cleanup;
if (VIR_APPEND_ELEMENT(data, ndata, tmp) < 0)
goto cleanup; goto cleanup;
} }
for (i = ndata; i > 0; i--) { for (i = data->nsrcdata; i > 0; i--) {
if (qemuBuildBlockStorageSourceAttachDataCommandline(cmd, if (qemuBuildBlockStorageSourceAttachDataCommandline(cmd,
data[i - 1]) < 0) data->srcdata[i - 1]) < 0)
goto cleanup; goto cleanup;
} }
...@@ -2617,9 +2600,6 @@ qemuBuildDiskSourceCommandLine(virCommandPtr cmd, ...@@ -2617,9 +2600,6 @@ qemuBuildDiskSourceCommandLine(virCommandPtr cmd,
ret = 0; ret = 0;
cleanup: cleanup:
for (i = 0; i < ndata; i++)
qemuBlockStorageSourceAttachDataFree(data[i]);
VIR_FREE(data);
virJSONValueFree(copyOnReadProps); virJSONValueFree(copyOnReadProps);
VIR_FREE(str); VIR_FREE(str);
return ret; return ret;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册