diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 9062be38ab824ee349cf9a3789aa84d55c80295a..8bf23e9f308d1ca6aa35f00b674c06e311a79cce 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -776,38 +776,28 @@ qemuMigrationSrcNBDCopyCancel(virQEMUDriverPtr driver, } -static int -qemuMigrationSrcNBDStorageCopyBlockdev(virQEMUDriverPtr driver, - virDomainObjPtr vm, - virDomainDiskDefPtr disk, - const char *diskAlias, - const char *host, - int port, - unsigned long long mirror_speed, - unsigned int mirror_shallow, - const char *tlsAlias) +static virStorageSourcePtr +qemuMigrationSrcNBDStorageCopyBlockdevPrepareSource(virDomainDiskDefPtr disk, + const char *host, + int port, + const char *tlsAlias) { - g_autoptr(qemuBlockStorageSourceAttachData) data = NULL; - qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); - int mon_ret = 0; g_autoptr(virStorageSource) copysrc = NULL; - VIR_DEBUG("starting blockdev mirror for disk=%s to host=%s", diskAlias, host); - if (!(copysrc = virStorageSourceNew())) - return -1; + return NULL; copysrc->type = VIR_STORAGE_TYPE_NETWORK; copysrc->protocol = VIR_STORAGE_NET_PROTOCOL_NBD; copysrc->format = VIR_STORAGE_FILE_RAW; if (!(copysrc->backingStore = virStorageSourceNew())) - return -1; + return NULL; - copysrc->path = g_strdup(diskAlias); + if (!(copysrc->path = qemuAliasDiskDriveFromDisk(disk))) + return NULL; - if (VIR_ALLOC_N(copysrc->hosts, 1) < 0) - return -1; + copysrc->hosts = g_new0(virStorageNetHostDef, 1); copysrc->nhosts = 1; copysrc->hosts->transport = VIR_STORAGE_NET_HOST_TRANS_TCP; @@ -819,6 +809,31 @@ qemuMigrationSrcNBDStorageCopyBlockdev(virQEMUDriverPtr driver, copysrc->nodestorage = g_strdup_printf("migration-%s-storage", disk->dst); copysrc->nodeformat = g_strdup_printf("migration-%s-format", disk->dst); + return g_steal_pointer(©src); +} + + +static int +qemuMigrationSrcNBDStorageCopyBlockdev(virQEMUDriverPtr driver, + virDomainObjPtr vm, + virDomainDiskDefPtr disk, + const char *diskAlias, + const char *host, + int port, + unsigned long long mirror_speed, + unsigned int mirror_shallow, + const char *tlsAlias) +{ + g_autoptr(qemuBlockStorageSourceAttachData) data = NULL; + qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); + int mon_ret = 0; + g_autoptr(virStorageSource) copysrc = NULL; + + VIR_DEBUG("starting blockdev mirror for disk=%s to host=%s", diskAlias, host); + + if (!(copysrc = qemuMigrationSrcNBDStorageCopyBlockdevPrepareSource(disk, host, port, tlsAlias))) + return -1; + /* Migration via blockdev-mirror was supported sooner than the auto-read-only * feature was added to qemu */ if (!(data = qemuBlockStorageSourceAttachPrepareBlockdev(copysrc,