From 6d1f8899a6470dde9ce69319b1b98b8951810bc9 Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Thu, 15 Oct 2015 19:49:22 +0200 Subject: [PATCH] qemu: Refactor waiting for completed migration on destination Move the code from qemuMigrationFinish into a dedicated function. Signed-off-by: Jiri Denemark --- src/qemu/qemu_migration.c | 45 +++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 3eee3a5930..e6b3484fa3 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2763,6 +2763,28 @@ qemuMigrationWaitForCompletion(virQEMUDriverPtr driver, } +static int +qemuMigrationWaitForDestCompletion(virQEMUDriverPtr driver, + virDomainObjPtr vm, + qemuDomainAsyncJob asyncJob) +{ + qemuDomainObjPrivatePtr priv = vm->privateData; + int rv; + + if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT)) + return 0; + + VIR_DEBUG("Waiting for incoming migration to complete"); + + while ((rv = qemuMigrationCompleted(driver, vm, asyncJob, NULL, 0)) != 1) { + if (rv < 0 || virDomainObjWait(vm) < 0) + return -1; + } + + return 0; +} + + static int qemuDomainMigrateGraphicsRelocate(virQEMUDriverPtr driver, virDomainObjPtr vm, @@ -5731,22 +5753,13 @@ qemuMigrationFinish(virQEMUDriverPtr driver, /* We need to wait for QEMU to process all data sent by the source * before starting guest CPUs. */ - if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATION_EVENT)) { - int rv; - VIR_DEBUG("Waiting for migration to complete"); - while ((rv = qemuMigrationCompleted(driver, vm, - QEMU_ASYNC_JOB_MIGRATION_IN, - NULL, 0)) != 1) { - if (rv < 0 || virDomainObjWait(vm) < 0) { - /* There's not much we can do for v2 protocol since the - * original domain on the source host is already gone. - */ - if (v3proto) - goto endjob; - else - break; - } - } + if (qemuMigrationWaitForDestCompletion(driver, vm, + QEMU_ASYNC_JOB_MIGRATION_IN) < 0) { + /* There's not much we can do for v2 protocol since the + * original domain on the source host is already gone. + */ + if (v3proto) + goto endjob; } if (!(flags & VIR_MIGRATE_PAUSED)) {