diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index eefec98022732c3cd344062acab175186b373d67..476e710257aa8853e603a757cb5cdbcda0eb73c4 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -11159,16 +11159,10 @@ qemuBuildStorageSourceChainAttachPrepareDrive(virDomainDiskDefPtr disk, } -/** - * qemuBuildStorageSourceChainAttachPrepareBlockdev: - * @top: storage source chain - * @qemuCaps: qemu capabilities object - * - * Prepares qemuBlockStorageSourceChainDataPtr for attaching @top via -blockdev. - */ -qemuBlockStorageSourceChainDataPtr -qemuBuildStorageSourceChainAttachPrepareBlockdev(virStorageSourcePtr top, - virQEMUCapsPtr qemuCaps) +static qemuBlockStorageSourceChainDataPtr +qemuBuildStorageSourceChainAttachPrepareBlockdevInternal(virStorageSourcePtr top, + virQEMUCapsPtr qemuCaps, + bool onlyTop) { VIR_AUTOPTR(qemuBlockStorageSourceAttachData) elem = NULL; VIR_AUTOPTR(qemuBlockStorageSourceChainData) data = NULL; @@ -11186,7 +11180,44 @@ qemuBuildStorageSourceChainAttachPrepareBlockdev(virStorageSourcePtr top, if (VIR_APPEND_ELEMENT(data->srcdata, data->nsrcdata, elem) < 0) return NULL; + + if (onlyTop) + break; } 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); +} diff --git a/src/qemu/qemu_command.h b/src/qemu/qemu_command.h index 8695832c16b6196f67dd2518e2feee12211e5e5e..7e2dc5a60ae1374c102ec374373ec06f4ebb4ccc 100644 --- a/src/qemu/qemu_command.h +++ b/src/qemu/qemu_command.h @@ -117,6 +117,9 @@ qemuBlockStorageSourceChainDataPtr qemuBuildStorageSourceChainAttachPrepareBlockdev(virStorageSourcePtr top, virQEMUCapsPtr qemuCaps); +qemuBlockStorageSourceChainDataPtr +qemuBuildStorageSourceChainAttachPrepareBlockdevTop(virStorageSourcePtr top, + virQEMUCapsPtr qemuCaps); char *qemuBuildDiskDeviceStr(const virDomainDef *def,