1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

qemu: Add possibility to prepare top image only for attachment via blockdev

qemuBuildStorageSourceChainAttachPrepareBlockdev prepares the full
backing chain for attachment via blockdev. For snapshots we'll need to
prepare one image only as it needs to be plugged on top of the existing
chain.

This patch introduces qemuBuildStorageSourceChainAttachPrepareBlockdevTop
which prepares only @top similarly to the original function by splitting
out the functionality into an internal function so that the API does not
change.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2019-07-22 10:35:09 +02:00
parent 6115b5e7d0
commit dfc980ab97
2 changed files with 44 additions and 10 deletions

View File

@ -11159,16 +11159,10 @@ qemuBuildStorageSourceChainAttachPrepareDrive(virDomainDiskDefPtr disk,
} }
/** static qemuBlockStorageSourceChainDataPtr
* qemuBuildStorageSourceChainAttachPrepareBlockdev: qemuBuildStorageSourceChainAttachPrepareBlockdevInternal(virStorageSourcePtr top,
* @top: storage source chain virQEMUCapsPtr qemuCaps,
* @qemuCaps: qemu capabilities object bool onlyTop)
*
* Prepares qemuBlockStorageSourceChainDataPtr for attaching @top via -blockdev.
*/
qemuBlockStorageSourceChainDataPtr
qemuBuildStorageSourceChainAttachPrepareBlockdev(virStorageSourcePtr top,
virQEMUCapsPtr qemuCaps)
{ {
VIR_AUTOPTR(qemuBlockStorageSourceAttachData) elem = NULL; VIR_AUTOPTR(qemuBlockStorageSourceAttachData) elem = NULL;
VIR_AUTOPTR(qemuBlockStorageSourceChainData) data = NULL; VIR_AUTOPTR(qemuBlockStorageSourceChainData) data = NULL;
@ -11186,7 +11180,44 @@ qemuBuildStorageSourceChainAttachPrepareBlockdev(virStorageSourcePtr top,
if (VIR_APPEND_ELEMENT(data->srcdata, data->nsrcdata, elem) < 0) if (VIR_APPEND_ELEMENT(data->srcdata, data->nsrcdata, elem) < 0)
return NULL; return NULL;
if (onlyTop)
break;
} }
VIR_RETURN_PTR(data); VIR_RETURN_PTR(data);
} }
/**
* qemuBuildStorageSourceChainAttachPrepareBlockdev:
* @top: storage source chain
* @qemuCaps: qemu capabilities object
*
* Prepares qemuBlockStorageSourceChainDataPtr for attaching the chain of images
* starting at @top via -blockdev.
*/
qemuBlockStorageSourceChainDataPtr
qemuBuildStorageSourceChainAttachPrepareBlockdev(virStorageSourcePtr top,
virQEMUCapsPtr qemuCaps)
{
return qemuBuildStorageSourceChainAttachPrepareBlockdevInternal(top, qemuCaps,
false);
}
/**
* qemuBuildStorageSourceChainAttachPrepareBlockdevTop:
* @top: storage source chain
* @qemuCaps: qemu capabilities object
*
* Prepares qemuBlockStorageSourceChainDataPtr for attaching of @top image only
* via -blockdev.
*/
qemuBlockStorageSourceChainDataPtr
qemuBuildStorageSourceChainAttachPrepareBlockdevTop(virStorageSourcePtr top,
virQEMUCapsPtr qemuCaps)
{
return qemuBuildStorageSourceChainAttachPrepareBlockdevInternal(top, qemuCaps,
true);
}

View File

@ -117,6 +117,9 @@ qemuBlockStorageSourceChainDataPtr
qemuBuildStorageSourceChainAttachPrepareBlockdev(virStorageSourcePtr top, qemuBuildStorageSourceChainAttachPrepareBlockdev(virStorageSourcePtr top,
virQEMUCapsPtr qemuCaps); virQEMUCapsPtr qemuCaps);
qemuBlockStorageSourceChainDataPtr
qemuBuildStorageSourceChainAttachPrepareBlockdevTop(virStorageSourcePtr top,
virQEMUCapsPtr qemuCaps);
char char
*qemuBuildDiskDeviceStr(const virDomainDef *def, *qemuBuildDiskDeviceStr(const virDomainDef *def,