From: Fabiano Rosas <farosas@suse.de>
To: Het Gala <het.gala@nutanix.com>, qemu-devel@nongnu.org
Cc: prerna.saxena@nutanix.com, quintela@redhat.com,
dgilbert@redhat.com, pbonzini@redhat.com, berrange@redhat.com,
armbru@redhat.com, eblake@redhat.com, manish.mishra@nutanix.com,
aravind.retnakaran@nutanix.com, Het Gala <het.gala@nutanix.com>
Subject: Re: [PATCH v11 02/10] migration: convert migration 'uri' into 'MigrateAddress'
Date: Wed, 04 Oct 2023 11:43:12 -0300 [thread overview]
Message-ID: <87jzs2phxb.fsf@suse.de> (raw)
In-Reply-To: <20231004075851.219173-3-het.gala@nutanix.com>
Het Gala <het.gala@nutanix.com> writes:
> This patch parses 'migrate' and 'migrate-incoming' QAPI's 'uri'
> string containing migration connection related information
> and stores them inside well defined 'MigrateAddress' struct.
>
> Suggested-by: Aravind Retnakaran <aravind.retnakaran@nutanix.com>
> Signed-off-by: Het Gala <het.gala@nutanix.com>
> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> migration/exec.c | 1 -
> migration/exec.h | 4 ++++
> migration/migration.c | 55 +++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 59 insertions(+), 1 deletion(-)
>
> diff --git a/migration/exec.c b/migration/exec.c
> index 2bf882bbe1..32f5143dfd 100644
> --- a/migration/exec.c
> +++ b/migration/exec.c
> @@ -27,7 +27,6 @@
> #include "qemu/cutils.h"
>
> #ifdef WIN32
> -const char *exec_get_cmd_path(void);
> const char *exec_get_cmd_path(void)
> {
> g_autofree char *detected_path = g_new(char, MAX_PATH);
> diff --git a/migration/exec.h b/migration/exec.h
> index b210ffde7a..736cd71028 100644
> --- a/migration/exec.h
> +++ b/migration/exec.h
> @@ -19,6 +19,10 @@
>
> #ifndef QEMU_MIGRATION_EXEC_H
> #define QEMU_MIGRATION_EXEC_H
> +
> +#ifdef WIN32
> +const char *exec_get_cmd_path(void);
> +#endif
> void exec_start_incoming_migration(const char *host_port, Error **errp);
>
> void exec_start_outgoing_migration(MigrationState *s, const char *host_port,
> diff --git a/migration/migration.c b/migration/migration.c
> index 6d3cf5d5cd..dcbd509d56 100644
> --- a/migration/migration.c
> +++ b/migration/migration.c
> @@ -65,6 +65,7 @@
> #include "sysemu/qtest.h"
> #include "options.h"
> #include "sysemu/dirtylimit.h"
> +#include "qemu/sockets.h"
>
> static NotifierList migration_state_notifiers =
> NOTIFIER_LIST_INITIALIZER(migration_state_notifiers);
> @@ -427,15 +428,64 @@ void migrate_add_address(SocketAddress *address)
> QAPI_CLONE(SocketAddress, address));
> }
>
> +static bool migrate_uri_parse(const char *uri,
> + MigrationAddress **channel,
> + Error **errp)
> +{
> + g_autoptr(MigrationAddress) addr = g_new0(MigrationAddress, 1);
This cannot be g_autoptr because you're passing it out of scope at the
end of the function.
> + SocketAddress *saddr = &addr->u.socket;
This attribution is useless. Down below you overwrite it with the result
of socket_parse.
> + InetSocketAddress *isock = &addr->u.rdma;
> + strList **tail = &addr->u.exec.args;
> +
> + if (strstart(uri, "exec:", NULL)) {
> + addr->transport = MIGRATION_ADDRESS_TYPE_EXEC;
> +#ifdef WIN32
> + QAPI_LIST_APPEND(tail, g_strdup(exec_get_cmd_path()));
> + QAPI_LIST_APPEND(tail, g_strdup("/c"));
> +#else
> + QAPI_LIST_APPEND(tail, g_strdup("/bin/sh"));
> + QAPI_LIST_APPEND(tail, g_strdup("-c"));
> +#endif
> + QAPI_LIST_APPEND(tail, g_strdup(uri + strlen("exec:")));
> + } else if (strstart(uri, "rdma:", NULL)) {
> + if (inet_parse(isock, uri + strlen("rdma:"), errp)) {
> + qapi_free_InetSocketAddress(isock);
> + return false;
> + }
> + addr->transport = MIGRATION_ADDRESS_TYPE_RDMA;
> + } else if (strstart(uri, "tcp:", NULL) ||
> + strstart(uri, "unix:", NULL) ||
> + strstart(uri, "vsock:", NULL) ||
> + strstart(uri, "fd:", NULL)) {
> + addr->transport = MIGRATION_ADDRESS_TYPE_SOCKET;
> + saddr = socket_parse(uri, errp);
> + if (!saddr) {
> + qapi_free_SocketAddress(saddr);
Shouldn't free here. socket_parse() already does so on failure.
> + return false;
> + }
Then here you can set the values you intended to set.
addr->u.socket.type = saddr->type;
addr->u.socket.u = saddr->u;
> + } else {
> + error_setg(errp, "unknown migration protocol: %s", uri);
> + return false;
> + }
> +
> + *channel = addr;
> + return true;
> +}
> +
> static void qemu_start_incoming_migration(const char *uri, Error **errp)
> {
> const char *p = NULL;
> + g_autoptr(MigrationAddress) channel = g_new0(MigrationAddress, 1);
The memory is leaked here because the pointer is overwritten below. Just
set it to NULL. You can keep the g_autoptr.
>
> /* URI is not suitable for migration? */
> if (!migration_channels_and_uri_compatible(uri, errp)) {
> return;
> }
>
> + if (uri && !migrate_uri_parse(uri, &channel, errp)) {
> + return;
> + }
> +
> qapi_event_send_migration(MIGRATION_STATUS_SETUP);
> if (strstart(uri, "tcp:", &p) ||
> strstart(uri, "unix:", NULL) ||
> @@ -1671,12 +1721,17 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,
> Error *local_err = NULL;
> MigrationState *s = migrate_get_current();
> const char *p = NULL;
> + g_autoptr(MigrationAddress) channel = g_new0(MigrationAddress, 1);
Same here.
>
> /* URI is not suitable for migration? */
> if (!migration_channels_and_uri_compatible(uri, errp)) {
> return;
> }
>
> + if (!migrate_uri_parse(uri, &channel, errp)) {
> + return;
> + }
> +
> resume_requested = has_resume && resume;
> if (!migrate_prepare(s, has_blk && blk, has_inc && inc,
> resume_requested, errp)) {
next prev parent reply other threads:[~2023-10-04 14:44 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-04 7:58 [PATCH v11 00/10] migration: Modify 'migrate' and 'migrate-incoming' QAPI commands for migration Het Gala
2023-10-04 7:58 ` [PATCH v11 01/10] migration: New QAPI type 'MigrateAddress' Het Gala
2023-10-04 7:58 ` [PATCH v11 02/10] migration: convert migration 'uri' into 'MigrateAddress' Het Gala
2023-10-04 11:48 ` Juan Quintela
2023-10-04 11:52 ` Juan Quintela
2023-10-04 14:43 ` Fabiano Rosas [this message]
2023-10-04 17:58 ` Daniel P. Berrangé
2023-10-04 18:12 ` Fabiano Rosas
2023-10-07 11:35 ` Het Gala
2023-10-09 14:13 ` Fabiano Rosas
2023-10-09 15:06 ` Het Gala
2023-10-07 9:01 ` Het Gala
2023-10-04 7:58 ` [PATCH v11 03/10] migration: convert socket backend to accept MigrateAddress Het Gala
2023-10-04 7:58 ` [PATCH v11 04/10] migration: convert rdma " Het Gala
2023-10-04 7:58 ` [PATCH v11 05/10] migration: convert exec " Het Gala
2023-10-04 14:55 ` Fabiano Rosas
2023-10-07 12:36 ` Het Gala
2023-10-04 7:58 ` [PATCH v11 06/10] migration: New migrate and migrate-incoming argument 'channels' Het Gala
2023-10-04 7:58 ` [PATCH v11 07/10] migration: modify migration_channels_and_uri_compatible() for new QAPI syntax Het Gala
2023-10-04 7:58 ` [PATCH v11 08/10] migration: Implement MigrateChannelList to qmp migration flow Het Gala
2023-10-04 15:21 ` Fabiano Rosas
2023-10-07 16:25 ` Het Gala
2023-10-09 14:29 ` Fabiano Rosas
2023-10-10 5:17 ` Het Gala
2023-10-04 7:58 ` [PATCH v11 09/10] migration: Implement MigrateChannelList to hmp " Het Gala
2023-10-04 15:25 ` Fabiano Rosas
2023-10-07 16:56 ` Het Gala
2023-10-09 14:35 ` Fabiano Rosas
2023-10-10 5:20 ` Het Gala
2023-10-04 7:58 ` [PATCH v11 10/10] migration: modify test_multifd_tcp_none() to use new QAPI syntax Het Gala
2023-10-04 15:25 ` Fabiano Rosas
2023-10-09 13:17 ` Het Gala
2023-10-04 13:33 ` [PATCH v11 00/10] migration: Modify 'migrate' and 'migrate-incoming' QAPI commands for migration Fabiano Rosas
2023-10-04 13:45 ` Het Gala
2023-10-04 14:03 ` Fabiano Rosas
2023-10-04 15:32 ` Fabiano Rosas
2023-10-09 13:25 ` Het Gala
2023-10-06 16:17 ` Het Gala
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87jzs2phxb.fsf@suse.de \
--to=farosas@suse.de \
--cc=aravind.retnakaran@nutanix.com \
--cc=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=het.gala@nutanix.com \
--cc=manish.mishra@nutanix.com \
--cc=pbonzini@redhat.com \
--cc=prerna.saxena@nutanix.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.