From nobody Wed May 14 17:03:54 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1522853290245911.5484036785919; Wed, 4 Apr 2018 07:48:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D059F765D7; Wed, 4 Apr 2018 14:48:08 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 8FE478221A; Wed, 4 Apr 2018 14:48:08 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 3E392B34A4; Wed, 4 Apr 2018 14:48:08 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w34Eg52B020150 for ; Wed, 4 Apr 2018 10:42:05 -0400 Received: by smtp.corp.redhat.com (Postfix) id E68B510B2B51; Wed, 4 Apr 2018 14:42:04 +0000 (UTC) Received: from virval.usersys.redhat.com (unknown [10.43.2.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A9B3210B2B4D for ; Wed, 4 Apr 2018 14:42:03 +0000 (UTC) Received: by virval.usersys.redhat.com (Postfix, from userid 500) id 8A9B21044DB; Wed, 4 Apr 2018 16:42:01 +0200 (CEST) From: Jiri Denemark To: libvir-list@redhat.com Date: Wed, 4 Apr 2018 16:40:56 +0200 Message-Id: <576fd83c0d9b606e16007e48a2807e31420462f7.1522852107.git.jdenemar@redhat.com> In-Reply-To: References: In-Reply-To: References: Mail-Followup-To: libvir-list@redhat.com X-Scanned-By: MIMEDefang 2.78 on 10.11.54.3 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 07/68] qemu: Allocate struct for migration parameters X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Wed, 04 Apr 2018 14:48:09 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" It will get a bit more complicated soon and storing it on a stack with {0} initializer will no longer work. We need a proper constructor. Signed-off-by: Jiri Denemark --- src/qemu/qemu_driver.c | 20 +++++++++++------ src/qemu/qemu_migration.c | 28 ++++++++++++++--------- src/qemu/qemu_migration_params.c | 38 +++++++++++++++++++++++--------- src/qemu/qemu_migration_params.h | 3 +++ 4 files changed, 61 insertions(+), 28 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index bf6c0d0826..c157ff9bb0 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -12241,7 +12241,7 @@ qemuDomainMigratePerform(virDomainPtr dom, int ret =3D -1; const char *dconnuri =3D NULL; qemuMigrationCompressionPtr compression =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); =20 @@ -12252,6 +12252,9 @@ qemuDomainMigratePerform(virDomainPtr dom, goto cleanup; } =20 + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) goto cleanup; =20 @@ -12276,12 +12279,12 @@ qemuDomainMigratePerform(virDomainPtr dom, */ ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, NULL, NULL, dconnuri, uri, NULL, NULL, 0, NULL= , 0, - compression, &migParams, cookie, cookiel= en, + compression, migParams, cookie, cookiele= n, NULL, NULL, /* No output cookies in v2 */ flags, dname, resource, false); =20 cleanup: - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); VIR_FREE(compression); return ret; } @@ -12666,13 +12669,16 @@ qemuDomainMigratePerform3(virDomainPtr dom, virQEMUDriverPtr driver =3D dom->conn->privateData; virDomainObjPtr vm; qemuMigrationCompressionPtr compression =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 virCheckFlags(QEMU_MIGRATION_FLAGS, -1); =20 + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) - return -1; + goto cleanup; =20 if (!(vm =3D qemuDomObjFromDomain(dom))) goto cleanup; @@ -12684,13 +12690,13 @@ qemuDomainMigratePerform3(virDomainPtr dom, =20 ret =3D qemuMigrationSrcPerform(driver, dom->conn, vm, xmlin, NULL, dconnuri, uri, NULL, NULL, 0, NULL, 0, - compression, &migParams, + compression, migParams, cookiein, cookieinlen, cookieout, cookieoutlen, flags, dname, resource, true); =20 cleanup: - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); VIR_FREE(compression); return ret; } diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 4bdaa67ea1..ffdf0ba2e5 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2254,7 +2254,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, int rv; char *tlsAlias =3D NULL; char *secAlias =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; =20 virNWFilterReadLockFilterUpdates(); =20 @@ -2304,6 +2304,9 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, if (!qemuMigrationSrcIsAllowedHostdev(*def)) goto cleanup; =20 + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + /* Let migration hook filter domain XML */ if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { char *xml; @@ -2448,7 +2451,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, } =20 if (qemuMigrationParamsSetCompression(driver, vm, QEMU_ASYNC_JOB_MIGRA= TION_IN, - compression, &migParams) < 0) + compression, migParams) < 0) goto stopjob; =20 /* Migrations using TLS need to add the "tls-creds-x509" object and @@ -2461,17 +2464,17 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, =20 if (qemuMigrationParamsAddTLSObjects(driver, vm, cfg, true, QEMU_ASYNC_JOB_MIGRATION_IN, - &tlsAlias, &secAlias, &migPar= ams) < 0) + &tlsAlias, &secAlias, migPara= ms) < 0) goto stopjob; =20 /* Force reset of 'tls-hostname', it's a source only parameter */ - if (VIR_STRDUP(migParams.tlsHostname, "") < 0) + if (VIR_STRDUP(migParams->tlsHostname, "") < 0) goto stopjob; =20 } else { if (qemuMigrationParamsSetEmptyTLS(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, - &migParams) < 0) + migParams) < 0) goto stopjob; } =20 @@ -2492,7 +2495,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, goto stopjob; =20 if (qemuMigrationParamsSet(driver, vm, QEMU_ASYNC_JOB_MIGRATION_IN, - &migParams) < 0) + migParams) < 0) goto stopjob; =20 if (mig->nbd && @@ -2580,7 +2583,7 @@ qemuMigrationDstPrepareAny(virQEMUDriverPtr driver, virDomainObjRemoveTransientDef(vm); qemuDomainRemoveInactiveJob(driver, vm); } - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); virDomainObjEndAPI(&vm); qemuDomainEventQueue(driver, event); qemuMigrationCookieFree(mig); @@ -3884,7 +3887,7 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, virStreamPtr st =3D NULL; unsigned long destflags; qemuMigrationCompressionPtr compression =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; =20 VIR_DEBUG("driver=3D%p, sconn=3D%p, dconn=3D%p, vm=3D%p, dconnuri=3D%s= , " "flags=3D0x%lx, dname=3D%s, resource=3D%lu", @@ -3906,6 +3909,9 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, destflags =3D flags & ~(VIR_MIGRATE_ABORT_ON_ERROR | VIR_MIGRATE_AUTO_CONVERGE); =20 + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + if (!(compression =3D qemuMigrationAnyCompressionParse(NULL, 0, flags)= )) goto cleanup; =20 @@ -3961,13 +3967,13 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr = driver, ret =3D qemuMigrationSrcPerformTunnel(driver, vm, st, NULL, NULL, 0, NULL, NULL, flags, resource, dconn, - NULL, 0, NULL, compression, &m= igParams); + NULL, 0, NULL, compression, mi= gParams); else ret =3D qemuMigrationSrcPerformNative(driver, vm, NULL, uri_out, cookie, cookielen, NULL, NULL, /* No out cookie w= ith v2 migration */ flags, resource, dconn, NULL, = 0, NULL, - compression, &migParams); + compression, migParams); =20 /* Perform failed. Make sure Finish doesn't overwrite the error */ if (ret < 0) @@ -4007,7 +4013,7 @@ qemuMigrationSrcPerformPeer2Peer2(virQEMUDriverPtr dr= iver, virSetError(orig_err); virFreeError(orig_err); } - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); VIR_FREE(uri_out); VIR_FREE(cookie); VIR_FREE(compression); diff --git a/src/qemu/qemu_migration_params.c b/src/qemu/qemu_migration_par= ams.c index 867fe82b92..1b4aa46854 100644 --- a/src/qemu/qemu_migration_params.c +++ b/src/qemu/qemu_migration_params.c @@ -38,6 +38,18 @@ VIR_LOG_INIT("qemu.qemu_migration_params"); #define QEMU_MIGRATION_TLS_ALIAS_BASE "libvirt_migrate" =20 =20 +qemuMonitorMigrationParamsPtr +qemuMigrationParamsNew(void) +{ + qemuMonitorMigrationParamsPtr params; + + if (VIR_ALLOC(params) < 0) + return NULL; + + return params; +} + + void qemuMigrationParamsClear(qemuMonitorMigrationParamsPtr migParams) { @@ -67,7 +79,7 @@ qemuMigrationParamsFromFlags(virTypedParameterPtr params, { qemuMonitorMigrationParamsPtr migParams; =20 - if (VIR_ALLOC(migParams) < 0) + if (!(migParams =3D qemuMigrationParamsNew())) return NULL; =20 if (!params) @@ -151,16 +163,19 @@ qemuMigrationParamsCheckTLSCreds(virQEMUDriverPtr dri= ver, { int ret =3D -1; qemuDomainObjPrivatePtr priv =3D vm->privateData; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; =20 if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; =20 - if (qemuMonitorGetMigrationParams(priv->mon, &migParams) < 0) + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + + if (qemuMonitorGetMigrationParams(priv->mon, migParams) < 0) goto cleanup; =20 /* NB: Could steal NULL pointer too! Let caller decide what to do. */ - VIR_STEAL_PTR(priv->migTLSAlias, migParams.tlsCreds); + VIR_STEAL_PTR(priv->migTLSAlias, migParams->tlsCreds); =20 ret =3D 0; =20 @@ -168,7 +183,7 @@ qemuMigrationParamsCheckTLSCreds(virQEMUDriverPtr drive= r, if (qemuDomainObjExitMonitor(driver, vm) < 0) ret =3D -1; =20 - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); =20 return ret; } @@ -384,7 +399,7 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; char *tlsAlias =3D NULL; char *secAlias =3D NULL; - qemuMonitorMigrationParams migParams =3D { 0 }; + qemuMonitorMigrationParamsPtr migParams =3D NULL; int ret =3D -1; =20 if (qemuMigrationParamsCheckTLSCreds(driver, vm, asyncJob) < 0) @@ -395,6 +410,9 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, if (!priv->migTLSAlias || !*priv->migTLSAlias) return 0; =20 + if (!(migParams =3D qemuMigrationParamsNew())) + goto cleanup; + /* NB: If either or both fail to allocate memory we can still proceed * since the next time we migrate another deletion attempt will be * made after successfully generating the aliases. */ @@ -404,9 +422,9 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, tlsAlias); qemuDomainSecretInfoFree(&priv->migSecinfo); =20 - if (VIR_STRDUP(migParams.tlsCreds, "") < 0 || - VIR_STRDUP(migParams.tlsHostname, "") < 0 || - qemuMigrationParamsSet(driver, vm, asyncJob, &migParams) < 0) + if (VIR_STRDUP(migParams->tlsCreds, "") < 0 || + VIR_STRDUP(migParams->tlsHostname, "") < 0 || + qemuMigrationParamsSet(driver, vm, asyncJob, migParams) < 0) goto cleanup; =20 ret =3D 0; @@ -414,7 +432,7 @@ qemuMigrationParamsResetTLS(virQEMUDriverPtr driver, cleanup: VIR_FREE(tlsAlias); VIR_FREE(secAlias); - qemuMigrationParamsClear(&migParams); + qemuMigrationParamsFree(migParams); =20 return ret; } diff --git a/src/qemu/qemu_migration_params.h b/src/qemu/qemu_migration_par= ams.h index d3e7fe9d7a..bc608905cc 100644 --- a/src/qemu/qemu_migration_params.h +++ b/src/qemu/qemu_migration_params.h @@ -28,6 +28,9 @@ # include "qemu_conf.h" =20 =20 +qemuMonitorMigrationParamsPtr +qemuMigrationParamsNew(void); + qemuMonitorMigrationParamsPtr qemuMigrationParamsFromFlags(virTypedParameterPtr params, int nparams, --=20 2.17.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list