From: "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com>
To: qemu-devel@nongnu.org, quintela@redhat.com
Cc: peterx@redhat.com, lvivier@redhat.com, groug@kaod.org,
ross.lagerwall@citrix.com, wei.w.wang@intel.com,
danielhb@linux.vnet.ibm.com
Subject: [Qemu-devel] [PULL 02/14] migration: Route errors down through migration_channel_connect
Date: Tue, 6 Feb 2018 15:49:24 +0000 [thread overview]
Message-ID: <20180206154936.13565-3-dgilbert@redhat.com> (raw)
In-Reply-To: <20180206154936.13565-1-dgilbert@redhat.com>
From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Route async errors (especially from sockets) down through
migration_channel_connect and on to migrate_fd_connect where they
can be cleaned up.
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
---
migration/channel.c | 32 ++++++++++++++++----------------
migration/channel.h | 3 ++-
migration/exec.c | 2 +-
migration/fd.c | 2 +-
migration/socket.c | 4 +---
migration/tls.c | 3 +--
migration/trace-events | 2 +-
7 files changed, 23 insertions(+), 25 deletions(-)
diff --git a/migration/channel.c b/migration/channel.c
index fdb7ddbd17..c5eaf0fa0e 100644
--- a/migration/channel.c
+++ b/migration/channel.c
@@ -55,29 +55,29 @@ void migration_channel_process_incoming(QIOChannel *ioc)
* @s: Current migration state
* @ioc: Channel to which we are connecting
* @hostname: Where we want to connect
+ * @error: Error indicating failure to connect, free'd here
*/
void migration_channel_connect(MigrationState *s,
QIOChannel *ioc,
- const char *hostname)
+ const char *hostname,
+ Error *error)
{
trace_migration_set_outgoing_channel(
- ioc, object_get_typename(OBJECT(ioc)), hostname);
+ ioc, object_get_typename(OBJECT(ioc)), hostname, error);
- if (s->parameters.tls_creds &&
- *s->parameters.tls_creds &&
- !object_dynamic_cast(OBJECT(ioc),
- TYPE_QIO_CHANNEL_TLS)) {
- Error *local_err = NULL;
- migration_tls_channel_connect(s, ioc, hostname, &local_err);
- if (local_err) {
- migrate_fd_error(s, local_err);
- error_free(local_err);
- }
- } else {
- QEMUFile *f = qemu_fopen_channel_output(ioc);
+ if (!error) {
+ if (s->parameters.tls_creds &&
+ *s->parameters.tls_creds &&
+ !object_dynamic_cast(OBJECT(ioc),
+ TYPE_QIO_CHANNEL_TLS)) {
+ migration_tls_channel_connect(s, ioc, hostname, &error);
+ } else {
+ QEMUFile *f = qemu_fopen_channel_output(ioc);
- s->to_dst_file = f;
+ s->to_dst_file = f;
- migrate_fd_connect(s, NULL);
+ }
}
+ migrate_fd_connect(s, error);
+ error_free(error);
}
diff --git a/migration/channel.h b/migration/channel.h
index e4b40579a1..67a461c28a 100644
--- a/migration/channel.h
+++ b/migration/channel.h
@@ -22,5 +22,6 @@ void migration_channel_process_incoming(QIOChannel *ioc);
void migration_channel_connect(MigrationState *s,
QIOChannel *ioc,
- const char *hostname);
+ const char *hostname,
+ Error *error_in);
#endif
diff --git a/migration/exec.c b/migration/exec.c
index f3be1baf2e..c9537974ad 100644
--- a/migration/exec.c
+++ b/migration/exec.c
@@ -39,7 +39,7 @@ void exec_start_outgoing_migration(MigrationState *s, const char *command, Error
}
qio_channel_set_name(ioc, "migration-exec-outgoing");
- migration_channel_connect(s, ioc, NULL);
+ migration_channel_connect(s, ioc, NULL, NULL);
object_unref(OBJECT(ioc));
}
diff --git a/migration/fd.c b/migration/fd.c
index 30de4b9847..6284a97cba 100644
--- a/migration/fd.c
+++ b/migration/fd.c
@@ -39,7 +39,7 @@ void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **
}
qio_channel_set_name(QIO_CHANNEL(ioc), "migration-fd-outgoing");
- migration_channel_connect(s, ioc, NULL);
+ migration_channel_connect(s, ioc, NULL, NULL);
object_unref(OBJECT(ioc));
}
diff --git a/migration/socket.c b/migration/socket.c
index 3a8232dd2d..e090097077 100644
--- a/migration/socket.c
+++ b/migration/socket.c
@@ -79,12 +79,10 @@ static void socket_outgoing_migration(QIOTask *task,
if (qio_task_propagate_error(task, &err)) {
trace_migration_socket_outgoing_error(error_get_pretty(err));
- migrate_fd_error(data->s, err);
- error_free(err);
} else {
trace_migration_socket_outgoing_connected(data->hostname);
- migration_channel_connect(data->s, sioc, data->hostname);
}
+ migration_channel_connect(data->s, sioc, data->hostname, err);
object_unref(OBJECT(sioc));
}
diff --git a/migration/tls.c b/migration/tls.c
index 026a008667..a29b35b33c 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -118,11 +118,10 @@ static void migration_tls_outgoing_handshake(QIOTask *task,
if (qio_task_propagate_error(task, &err)) {
trace_migration_tls_outgoing_handshake_error(error_get_pretty(err));
- migrate_fd_error(s, err);
} else {
trace_migration_tls_outgoing_handshake_complete();
- migration_channel_connect(s, ioc, NULL);
}
+ migration_channel_connect(s, ioc, NULL, err);
object_unref(OBJECT(ioc));
}
diff --git a/migration/trace-events b/migration/trace-events
index 6f29fcc686..93961dea16 100644
--- a/migration/trace-events
+++ b/migration/trace-events
@@ -114,7 +114,7 @@ migrate_transferred(uint64_t tranferred, uint64_t time_spent, double bandwidth,
process_incoming_migration_co_end(int ret, int ps) "ret=%d postcopy-state=%d"
process_incoming_migration_co_postcopy_end_main(void) ""
migration_set_incoming_channel(void *ioc, const char *ioctype) "ioc=%p ioctype=%s"
-migration_set_outgoing_channel(void *ioc, const char *ioctype, const char *hostname) "ioc=%p ioctype=%s hostname=%s"
+migration_set_outgoing_channel(void *ioc, const char *ioctype, const char *hostname, void *err) "ioc=%p ioctype=%s hostname=%s err=%p"
# migration/rdma.c
qemu_rdma_accept_incoming_migration(void) ""
--
2.14.3
next prev parent reply other threads:[~2018-02-06 15:50 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-06 15:49 [Qemu-devel] [PULL 00/14] migration queue Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 01/14] migration: Allow migrate_fd_connect to take an Error * Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` Dr. David Alan Gilbert (git) [this message]
2018-02-06 15:49 ` [Qemu-devel] [PULL 03/14] migration/savevm.c: set MAX_VM_CMD_PACKAGED_SIZE to 1ul << 32 Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 04/14] migration: use s->threshold_size inside migration_update_counters Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 05/14] migration: Drop current address parameter from save_zero_page() Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 06/14] tests: Remove deprecated migration tests commands Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 07/14] tests: Consolidate accelerators declaration Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 08/14] tests: Use consistent names for migration Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 09/14] tests: Add deprecated commands migration test Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 10/14] tests: Create migrate-start-postcopy command Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 11/14] tests: Adjust sleeps for migration test Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 12/14] migration: Recover block devices if failure in device state Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 13/14] migration: Don't leak IO channels Dr. David Alan Gilbert (git)
2018-02-06 15:49 ` [Qemu-devel] [PULL 14/14] migration: incoming postcopy advise sanity checks Dr. David Alan Gilbert (git)
2018-02-07 14:38 ` [Qemu-devel] [PULL 00/14] migration queue Peter Maydell
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=20180206154936.13565-3-dgilbert@redhat.com \
--to=dgilbert@redhat.com \
--cc=danielhb@linux.vnet.ibm.com \
--cc=groug@kaod.org \
--cc=lvivier@redhat.com \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=ross.lagerwall@citrix.com \
--cc=wei.w.wang@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).