[libvirt PATCH 25/80] qemu: Move success-only code out of endjob in qemuMigrationDstFinish
Peter Krempa
pkrempa at redhat.com
Wed May 11 13:40:58 UTC 2022
On Tue, May 10, 2022 at 17:20:46 +0200, Jiri Denemark wrote:
> Code executed only when dom != NULL can be moved before "endjob" label,
> to the only place where dom is set.
>
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
> src/qemu/qemu_migration.c | 50 ++++++++++++++++++++++-----------------
> 1 file changed, 28 insertions(+), 22 deletions(-)
>
> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
> index 1f6f008ad9..cb17cbd189 100644
> --- a/src/qemu/qemu_migration.c
> +++ b/src/qemu/qemu_migration.c
> @@ -5844,8 +5844,16 @@ qemuMigrationDstFinish(virQEMUDriver *driver,
>
> if (flags & VIR_MIGRATE_OFFLINE) {
> if (retcode == 0 &&
> - qemuMigrationDstPersist(driver, vm, mig, false) == 0)
> + qemuMigrationDstPersist(driver, vm, mig, false) == 0) {
> dom = virGetDomain(dconn, vm->def->name, vm->def->uuid, -1);
IMO virGetDomain should be treated as that it can't fail ...
> +
> + if (dom &&
... so this check seems pointless.
> + qemuMigrationCookieFormat(mig, driver, vm,
> + QEMU_MIGRATION_DESTINATION,
> + cookieout, cookieoutlen,
> + QEMU_MIGRATION_COOKIE_STATS) < 0)
broken alignment
> + VIR_WARN("Unable to encode migration cookie");
> + }
> goto endjob;
> }
>
> @@ -6008,6 +6016,25 @@ qemuMigrationDstFinish(virQEMUDriver *driver,
> /* Guest is successfully running, so cancel previous auto destroy */
> qemuProcessAutoDestroyRemove(driver, vm);
>
> + if (jobData) {
> + priv->job.completed = g_steal_pointer(&jobData);
> + priv->job.completed->status = VIR_DOMAIN_JOB_STATUS_COMPLETED;
> + qemuDomainJobSetStatsType(priv->job.completed,
> + QEMU_DOMAIN_JOB_STATS_TYPE_MIGRATION);
> + }
> +
> + if (qemuMigrationCookieFormat(mig, driver, vm,
> + QEMU_MIGRATION_DESTINATION,
> + cookieout, cookieoutlen,
> + QEMU_MIGRATION_COOKIE_STATS) < 0)
> + VIR_WARN("Unable to encode migration cookie");
E.g. here you don't check 'dom' because it's not yet allocated.
> +
> + /* Remove completed stats for post-copy, everything but timing fields
> + * is obsolete anyway.
> + */
> + if (inPostCopy)
> + g_clear_pointer(&priv->job.completed, virDomainJobDataFree);
> +
> dom = virGetDomain(dconn, vm->def->name, vm->def->uuid, vm->def->id);
>
> endjob:
Reviewed-by: Peter Krempa <pkrempa at redhat.com>
More information about the libvir-list
mailing list