[libvirt RFC 03/24] qemu_block: extract qemuBlockCommit impl to separate function
Peter Krempa
pkrempa at redhat.com
Thu Sep 1 12:42:09 UTC 2022
On Tue, Aug 23, 2022 at 18:32:06 +0200, Pavel Hrdina wrote:
> Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
> ---
> src/qemu/qemu_block.c | 78 ++++++++++++++++++++++++++-----------------
> src/qemu/qemu_block.h | 10 ++++++
> 2 files changed, 57 insertions(+), 31 deletions(-)
>
> diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
> index 5b34461853..902ec7b2a5 100644
> --- a/src/qemu/qemu_block.c
> +++ b/src/qemu/qemu_block.c
> @@ -3204,28 +3204,22 @@ qemuBlockExportAddNBD(virDomainObj *vm,
>
>
> int
> -qemuBlockCommit(virDomainObj *vm,
> - virQEMUDriver *driver,
> - const char *path,
> - const char *base,
> - const char *top,
> - unsigned long bandwidth,
> - unsigned int flags)
> +qemuBlockCommitImpl(virDomainObj *vm,
> + virQEMUDriver *driver,
> + virDomainDiskDef *disk,
> + virStorageSource *baseSource,
> + virStorageSource *topSource,
> + virStorageSource *top_parent,
> + unsigned long bandwidth,
> + unsigned int flags)
> {
> qemuDomainObjPrivate *priv = vm->privateData;
> int rc = -1;
> - virDomainDiskDef *disk = NULL;
> - virStorageSource *topSource;
> - virStorageSource *baseSource = NULL;
> - virStorageSource *top_parent = NULL;
> bool clean_access = false;
> g_autofree char *backingPath = NULL;
> qemuBlockJobData *job = NULL;
> g_autoptr(virStorageSource) mirror = NULL;
>
> - if (virDomainObjCheckActive(vm) < 0)
> - return -1;
> -
> /* Convert bandwidth MiB to bytes, if necessary */
> if (!(flags & VIR_DOMAIN_BLOCK_COMMIT_BANDWIDTH_BYTES)) {
> if (bandwidth > LLONG_MAX >> 20) {
> @@ -3237,9 +3231,6 @@ qemuBlockCommit(virDomainObj *vm,
> bandwidth <<= 20;
> }
>
> - if (!(disk = qemuDomainDiskByName(vm->def, path)))
> - return -1;
> -
> if (!qemuDomainDiskBlockJobIsSupported(disk))
> return -1;
>
> @@ -3256,12 +3247,6 @@ qemuBlockCommit(virDomainObj *vm,
> if (qemuDomainSupportsCheckpointsBlockjobs(vm) < 0)
> return -1;
>
> - if (!top || STREQ(top, disk->dst))
> - topSource = disk->src;
> - else if (!(topSource = virStorageSourceChainLookup(disk->src, NULL, top,
> - disk->dst, &top_parent)))
> - return -1;
> -
> if (topSource == disk->src) {
> /* XXX Should we auto-pivot when COMMIT_ACTIVE is not specified? */
> if (!(flags & VIR_DOMAIN_BLOCK_COMMIT_ACTIVE)) {
> @@ -3280,22 +3265,16 @@ qemuBlockCommit(virDomainObj *vm,
> if (!virStorageSourceHasBacking(topSource)) {
> virReportError(VIR_ERR_INVALID_ARG,
> _("top '%s' in chain for '%s' has no backing file"),
> - topSource->path, path);
> + topSource->path, disk->src->path);
> return -1;
> }
>
> - if (!base && (flags & VIR_DOMAIN_BLOCK_COMMIT_SHALLOW))
> - baseSource = topSource->backingStore;
> - else if (!(baseSource = virStorageSourceChainLookup(disk->src, topSource,
> - base, disk->dst, NULL)))
> - return -1;
> -
> if ((flags & VIR_DOMAIN_BLOCK_COMMIT_SHALLOW) &&
> baseSource != topSource->backingStore) {
> virReportError(VIR_ERR_INVALID_ARG,
> _("base '%s' is not immediately below '%s' in chain "
> "for '%s'"),
> - base, topSource->path, path);
> + baseSource->path, topSource->path, disk->src->path);
> return -1;
> }
>
> @@ -3400,6 +3379,43 @@ qemuBlockCommit(virDomainObj *vm,
> }
>
>
> +int
> +qemuBlockCommit(virDomainObj *vm,
> + virQEMUDriver *driver,
> + const char *path,
> + const char *base,
> + const char *top,
> + unsigned long bandwidth,
> + unsigned int flags)
> +{
> + virDomainDiskDef *disk = NULL;
> + virStorageSource *topSource;
> + virStorageSource *baseSource = NULL;
> + virStorageSource *top_parent = NULL;
> +
> + if (virDomainObjCheckActive(vm) < 0)
> + return -1;
> +
> + if (!(disk = qemuDomainDiskByName(vm->def, path)))
> + return -1;
> +
> + if (!top || STREQ(top, disk->dst))
> + topSource = disk->src;
> + else if (!(topSource = virStorageSourceChainLookup(disk->src, NULL, top,
> + disk->dst, &top_parent)))
> + return -1;
> +
> + if (!base && (flags & VIR_DOMAIN_BLOCK_COMMIT_SHALLOW))
> + baseSource = topSource->backingStore;
> + else if (!(baseSource = virStorageSourceChainLookup(disk->src, topSource,
> + base, disk->dst, NULL)))
> + return -1;
As mentioned in my reply to 1/N I'd prefer if this stuff is kept in
qemuDomainBlockCommit and the actual implementation is named qemuBlockCommit
instead of qemuBlockCommitImpl.
More information about the libvir-list
mailing list