From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45131) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5CNd-0007dw-7u for qemu-devel@nongnu.org; Wed, 17 Jun 2015 08:23:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z5CNa-00049p-20 for qemu-devel@nongnu.org; Wed, 17 Jun 2015 08:23:45 -0400 Received: from mx1.redhat.com ([209.132.183.28]:41819) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5CNZ-00049k-Qs for qemu-devel@nongnu.org; Wed, 17 Jun 2015 08:23:41 -0400 From: Juan Quintela In-Reply-To: <1434450415-11339-11-git-send-email-dgilbert@redhat.com> (David Alan Gilbert's message of "Tue, 16 Jun 2015 11:26:23 +0100") References: <1434450415-11339-1-git-send-email-dgilbert@redhat.com> <1434450415-11339-11-git-send-email-dgilbert@redhat.com> Date: Wed, 17 Jun 2015 14:23:39 +0200 Message-ID: <87vbem4j78.fsf@neno.neno> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Qemu-devel] [PATCH v7 10/42] Return path: Open a return path on QEMUFile for sockets Reply-To: quintela@redhat.com List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Dr. David Alan Gilbert (git)" Cc: aarcange@redhat.com, yamahata@private.email.ne.jp, liang.z.li@intel.com, qemu-devel@nongnu.org, luis@cs.umu.se, amit.shah@redhat.com, pbonzini@redhat.com, david@gibson.dropbear.id.au "Dr. David Alan Gilbert (git)" wrote: > From: "Dr. David Alan Gilbert" > > Postcopy needs a method to send messages from the destination back to > the source, this is the 'return path'. > > Wire it up for 'socket' QEMUFile's. > > Signed-off-by: Dr. David Alan Gilbert > --- > include/migration/qemu-file.h | 7 +++++ > migration/qemu-file-unix.c | 69 +++++++++++++++++++++++++++++++++++++------ > migration/qemu-file.c | 12 ++++++++ > 3 files changed, 79 insertions(+), 9 deletions(-) > > diff --git a/include/migration/qemu-file.h b/include/migration/qemu-file.h > index d43c835..7721c42 100644 > --- a/include/migration/qemu-file.h > +++ b/include/migration/qemu-file.h > @@ -85,6 +85,11 @@ typedef size_t (QEMURamSaveFunc)(QEMUFile *f, void *opaque, Hi > +/* > + * Give a QEMUFile* off the same socket but data in the opposite > + * direction. > + */ > +static QEMUFile *socket_dup_return_path(void *opaque) We call it dup > +{ > + QEMUFileSocket *forward = opaque; > + QEMUFileSocket *reverse; > + > + if (qemu_file_get_error(forward->file)) { > + /* If the forward file is in error, don't try and open a return */ > + return NULL; > + } > + > + reverse = g_malloc0(sizeof(QEMUFileSocket)); > + reverse->fd = forward->fd; But we don't dup it :p For the cest, I am ok with the patch. Reviewed-by: Juan Quintela > + /* I don't think there's a better way to tell which direction 'this' is */ > + if (forward->file->ops->get_buffer != NULL) { > + /* being called from the read side, so we need to be able to write */ > + return qemu_fopen_ops(reverse, &socket_return_write_ops); > + } else { > + return qemu_fopen_ops(reverse, &socket_return_read_ops); > + } > +} > + > static ssize_t unix_writev_buffer(void *opaque, struct iovec *iov, int iovcnt, > int64_t pos) > { > @@ -204,18 +254,19 @@ QEMUFile *qemu_fdopen(int fd, const char *mode) > } > > static const QEMUFileOps socket_read_ops = { > - .get_fd = socket_get_fd, > - .get_buffer = socket_get_buffer, > - .close = socket_close, > - .shut_down = socket_shutdown > - > + .get_fd = socket_get_fd, > + .get_buffer = socket_get_buffer, > + .close = socket_close, > + .shut_down = socket_shutdown, > + .get_return_path = socket_dup_return_path > }; > > static const QEMUFileOps socket_write_ops = { > - .get_fd = socket_get_fd, > - .writev_buffer = socket_writev_buffer, > - .close = socket_close, > - .shut_down = socket_shutdown > + .get_fd = socket_get_fd, > + .writev_buffer = socket_writev_buffer, > + .close = socket_close, > + .shut_down = socket_shutdown, > + .get_return_path = socket_dup_return_path > }; > > QEMUFile *qemu_fopen_socket(int fd, const char *mode) > diff --git a/migration/qemu-file.c b/migration/qemu-file.c > index c746129..7d9d983 100644 > --- a/migration/qemu-file.c > +++ b/migration/qemu-file.c > @@ -43,6 +43,18 @@ int qemu_file_shutdown(QEMUFile *f) > return f->ops->shut_down(f->opaque, true, true); > } > > +/* > + * Result: QEMUFile* for a 'return path' for comms in the opposite direction > + * NULL if not available > + */ > +QEMUFile *qemu_file_get_return_path(QEMUFile *f) > +{ > + if (!f->ops->get_return_path) { > + return NULL; > + } > + return f->ops->get_return_path(f->opaque); > +} > + > bool qemu_file_mode_is_not_valid(const char *mode) > { > if (mode == NULL ||