qemu: migration: Avoid use of 'nmigration_disks'

'migration_disks' is a NULL-terminated string list, so the code can be
converted to either iterate the string-list, use existing accessors or
check the presence of the pointers instead of checking the count.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
This commit is contained in:
Peter Krempa 2024-09-27 13:56:06 +02:00
parent d98beef107
commit 4ebf1acb83

View File

@ -382,18 +382,12 @@ qemuMigrationDstPrecreateDisk(virConnectPtr *conn,
static bool static bool
qemuMigrationAnyCopyDisk(virDomainDiskDef const *disk, qemuMigrationAnyCopyDisk(virDomainDiskDef const *disk,
size_t nmigrate_disks, const char **migrate_disks) size_t nmigrate_disks G_GNUC_UNUSED,
const char **migrate_disks)
{ {
size_t i; /* List of disks to migrate takes priority if present */
if (migrate_disks)
/* Check if the disk alias is in the list */ return g_strv_contains(migrate_disks, disk->dst);
if (nmigrate_disks) {
for (i = 0; i < nmigrate_disks; i++) {
if (STREQ(disk->dst, migrate_disks[i]))
return true;
}
return false;
}
/* Default is to migrate only non-shared non-readonly disks /* Default is to migrate only non-shared non-readonly disks
* with source */ * with source */
@ -2666,19 +2660,20 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
return NULL; return NULL;
} }
if (nmigrate_disks) { if (migrate_disks) {
size_t i, j; size_t j;
const char **d;
/* Check user requested only known disk targets. */ /* Check user requested only known disk targets. */
for (i = 0; i < nmigrate_disks; i++) { for (d = migrate_disks; *d; d++) {
for (j = 0; j < vm->def->ndisks; j++) { for (j = 0; j < vm->def->ndisks; j++) {
if (STREQ(vm->def->disks[j]->dst, migrate_disks[i])) if (STREQ(vm->def->disks[j]->dst, *d))
break; break;
} }
if (j == vm->def->ndisks) { if (j == vm->def->ndisks) {
virReportError(VIR_ERR_INVALID_ARG, virReportError(VIR_ERR_INVALID_ARG,
_("disk target %1$s not found"), _("disk target %1$s not found"), *d);
migrate_disks[i]);
return NULL; return NULL;
} }
} }
@ -2691,7 +2686,7 @@ qemuMigrationSrcBeginPhase(virQEMUDriver *driver,
nmigrate_disks)) nmigrate_disks))
cookieFlags |= QEMU_MIGRATION_COOKIE_NBD; cookieFlags |= QEMU_MIGRATION_COOKIE_NBD;
} else { } else {
if (nmigrate_disks > 0) { if (migrate_disks) {
virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s", virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("use of 'VIR_MIGRATE_PARAM_MIGRATE_DISKS' requires use of 'VIR_MIGRATE_NON_SHARED_DISK' or 'VIR_MIGRATE_NON_SHARED_INC' flag")); _("use of 'VIR_MIGRATE_PARAM_MIGRATE_DISKS' requires use of 'VIR_MIGRATE_NON_SHARED_DISK' or 'VIR_MIGRATE_NON_SHARED_INC' flag"));
return NULL; return NULL;
@ -5566,7 +5561,6 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriver *driver,
virTypedParameterPtr params = NULL; virTypedParameterPtr params = NULL;
int nparams = 0; int nparams = 0;
int maxparams = 0; int maxparams = 0;
size_t i;
bool offline = !!(flags & VIR_MIGRATE_OFFLINE); bool offline = !!(flags & VIR_MIGRATE_OFFLINE);
VIR_DEBUG("driver=%p, sconn=%p, dconn=%p, dconnuri=%s, vm=%p, xmlin=%s, " VIR_DEBUG("driver=%p, sconn=%p, dconn=%p, dconnuri=%s, vm=%p, xmlin=%s, "
@ -5625,11 +5619,15 @@ qemuMigrationSrcPerformPeer2Peer3(virQEMUDriver *driver,
VIR_MIGRATE_PARAM_LISTEN_ADDRESS, VIR_MIGRATE_PARAM_LISTEN_ADDRESS,
listenAddress) < 0) listenAddress) < 0)
goto cleanup; goto cleanup;
for (i = 0; i < nmigrate_disks; i++) if (migrate_disks) {
const char **d;
for (d = migrate_disks; *d; d++)
if (virTypedParamsAddString(&params, &nparams, &maxparams, if (virTypedParamsAddString(&params, &nparams, &maxparams,
VIR_MIGRATE_PARAM_MIGRATE_DISKS, VIR_MIGRATE_PARAM_MIGRATE_DISKS,
migrate_disks[i]) < 0) *d) < 0)
goto cleanup; goto cleanup;
}
if (nbdPort && if (nbdPort &&
virTypedParamsAddInt(&params, &nparams, &maxparams, virTypedParamsAddInt(&params, &nparams, &maxparams,
VIR_MIGRATE_PARAM_DISKS_PORT, VIR_MIGRATE_PARAM_DISKS_PORT,
@ -6020,7 +6018,7 @@ qemuMigrationSrcPerformPeer2Peer(virQEMUDriver *driver,
/* Only xmlin, dname, uri, and bandwidth parameters can be used with /* Only xmlin, dname, uri, and bandwidth parameters can be used with
* old-style APIs. */ * old-style APIs. */
if (!useParams && (graphicsuri || listenAddress || nmigrate_disks)) { if (!useParams && (graphicsuri || listenAddress || migrate_disks)) {
virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
_("Migration APIs with extensible parameters are not supported but extended parameters were passed")); _("Migration APIs with extensible parameters are not supported but extended parameters were passed"));
goto cleanup; goto cleanup;