[libvirt] [PATCH RFC 17/51] qemu: migration: Separate startup of disk mirror from migration logic

Ján Tomko jtomko at redhat.com
Mon Jan 7 13:09:48 UTC 2019


On Wed, Dec 12, 2018 at 06:08:33PM +0100, Peter Krempa wrote:
>Extract the disk mirroring startup code from the loop into a separate
>function to allow cleaner cleanup paths.
>
>Signed-off-by: Peter Krempa <pkrempa at redhat.com>
>---
> src/qemu/qemu_migration.c | 85 +++++++++++++++++++++++++--------------
> 1 file changed, 55 insertions(+), 30 deletions(-)
>
>diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
>index 5f4fcb4bad..9d165e27aa 100644
>--- a/src/qemu/qemu_migration.c
>+++ b/src/qemu/qemu_migration.c
>@@ -890,6 +890,58 @@ qemuMigrationSrcNBDStorageCopyDriveMirror(virQEMUDriverPtr driver,
> }
>
>
>+static int
>+qemuMigrationSrcNBDStorageCopyOne(virQEMUDriverPtr driver,
>+                                  virDomainObjPtr vm,
>+                                  virDomainDiskDefPtr disk,
>+                                  const char *host,
>+                                  int port,
>+                                  unsigned long long mirror_speed,
>+                                  unsigned int mirror_flags,
>+                                  const char *tlsAlias,
>+                                  unsigned int flags)
>+{
>+    qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk);
>+    char *diskAlias = NULL;
>+    int rc;
>+    int ret = -1;
>+
>+    if (!(diskAlias = qemuAliasDiskDriveFromDisk(disk)))
>+        goto cleanup;
>+
>+    qemuBlockJobSyncBeginDisk(disk);
>+
>+    if (flags & VIR_MIGRATE_TLS) {
>+        rc = qemuMigrationSrcNBDStorageCopyBlockdev(driver, vm,
>+                                                    disk, diskAlias,
>+                                                    host, port,
>+                                                    mirror_speed,
>+                                                    mirror_flags,
>+                                                    tlsAlias);
>+    } else {
>+        rc = qemuMigrationSrcNBDStorageCopyDriveMirror(driver, vm, diskAlias,
>+                                                       host, port,
>+                                                       mirror_speed,
>+                                                       mirror_flags);
>+    }
>+
>+    if (rc < 0) {
>+        qemuBlockJobSyncEndDisk(vm, QEMU_ASYNC_JOB_MIGRATION_OUT, disk);
>+        goto cleanup;
>+    }
>+

>+    VIR_FREE(diskAlias);

You can drop this line now that the success path will fall through to
cleanup instead of leading to another iteration of the loop.

>+    diskPriv->migrating = true;
>+    diskPriv->blockjob->started = true;
>+
>+    ret = 0;
>+
>+ cleanup:
>+    VIR_FREE(diskAlias);
>+    return ret;
>+}
>+

Reviewed-by: Ján Tomko <jtomko at redhat.com>

Jano
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20190107/855f8a59/attachment-0001.sig>


More information about the libvir-list mailing list