diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 2000c86640..4e959abebf 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -169,7 +169,7 @@ qemuMigrationSrcRestoreDomainState(virQEMUDriverPtr driver, virDomainObjPtr vm) static int -qemuMigrationDstPrecreateDisk(virConnectPtr conn, +qemuMigrationDstPrecreateDisk(virConnectPtr *conn, virDomainDiskDefPtr disk, unsigned long long capacity) { @@ -204,7 +204,12 @@ qemuMigrationDstPrecreateDisk(virConnectPtr conn, *volName = '\0'; volName++; - if (!(pool = virStoragePoolLookupByTargetPath(conn, basePath))) + if (!*conn) { + if (!(*conn = virGetConnectStorage())) + goto cleanup; + } + + if (!(pool = virStoragePoolLookupByTargetPath(*conn, basePath))) goto cleanup; format = virStorageFileFormatTypeToString(disk->src->format); if (disk->src->format == VIR_STORAGE_FILE_QCOW2) @@ -212,7 +217,12 @@ qemuMigrationDstPrecreateDisk(virConnectPtr conn, break; case VIR_STORAGE_TYPE_VOLUME: - if (!(pool = virStoragePoolLookupByName(conn, disk->src->srcpool->pool))) + if (!*conn) { + if (!(*conn = virGetConnectStorage())) + goto cleanup; + } + + if (!(pool = virStoragePoolLookupByName(*conn, disk->src->srcpool->pool))) goto cleanup; format = virStorageFileFormatTypeToString(disk->src->format); volName = disk->src->srcpool->volume; @@ -304,14 +314,11 @@ qemuMigrationDstPrecreateStorage(virDomainObjPtr vm, { int ret = -1; size_t i = 0; - virConnectPtr conn; + virConnectPtr conn = NULL; if (!nbd || !nbd->ndisks) return 0; - if (!(conn = virGetConnectStorage())) - return -1; - for (i = 0; i < nbd->ndisks; i++) { virDomainDiskDefPtr disk; const char *diskSrcPath; @@ -349,7 +356,8 @@ qemuMigrationDstPrecreateStorage(virDomainObjPtr vm, VIR_DEBUG("Proceeding with disk source %s", NULLSTR(diskSrcPath)); - if (qemuMigrationDstPrecreateDisk(conn, disk, nbd->disks[i].capacity) < 0) + if (qemuMigrationDstPrecreateDisk(&conn, + disk, nbd->disks[i].capacity) < 0) goto cleanup; }