提交 35e3069c 编写于 作者: P Peter Krempa

qemu: block: Split up qemuBlockStorageSourceAttachApply

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: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NJán Tomko <jtomko@redhat.com>
上级 16ca234b
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册