From: "Michael S. Tsirkin" <mst@redhat.com>
To: marcandre.lureau@redhat.com
Cc: qemu-devel@nongnu.org, mukawa@igel.co.jp,
yuanhan.liu@linux.intel.com, victork@redhat.com,
jonshin@cisco.com
Subject: Re: [Qemu-devel] [PATCH v4 00/29] vhost-user reconnect fixes
Date: Wed, 20 Jul 2016 16:41:51 +0300 [thread overview]
Message-ID: <20160720134151.GA7154@redhat.com> (raw)
In-Reply-To: <20160707010053.28008-1-marcandre.lureau@redhat.com>
On Thu, Jul 07, 2016 at 03:00:24AM +0200, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> Hi,
>
> Since 'vhost-user: simple reconnection support' was merged, it is
> possible to disconnect and reconnect a vhost-user backend. However,
> many code paths in qemu may trigger assert() when the backend is
> disconnected.
>
> Some assert() could simply be replaced by error_report() or silently
> fail since they are recoverable cases. Some missing error checks can
> also help prevent later issues. In many cases, the code assumes
> get_vhost_net() will be non-NULL after a succesful connection, so I
> changed it to stay after a disconnect until the new connection comes
> (as suggested by Michael). There are also code paths that are wrong,
> see "don't assume opaque is a fd" patch for an example.
>
> Since there is feature checks on reconnection, qemu should wait for
> the initial connection feature negotiation to complete. The test added
> demonstrates this. Additionally, a regression was found during v2,
> which could have been spotted with a multiqueue test, so add a basic
> one that would have exhibited the issue.
>
> For convenience, the series is also available on:
> https://github.com/elmarco/qemu, branch vhost-user-reconnect
So I'm guessing there will be v5 with a rebase. I sent some minor
comments but overall it's in good shape.
Could you add Cc stable to fixes that make sense there like
(I think) the opaque thing?
Thanks!
> v4:
> - change notify_migration_done() patch to be VHOST_BACKEND_TYPE_USER
> specific, to avoid having to handle the case where the backend
> doesn't implement the callback
> - change vhost_dev_cleanup() to assert on empty log, instead of
> adding a call to vhost_log_put()
> - made "keep vhost_net after a disconnection" more robust, got rid of
> the acked_features field
> - improve commit log, and some patch reorganization for clarity
>
> v3:
> - add vhost-user multiqueue test, which would have helped to find the
> following fix
> - fix waiting on vhost-user connection with multiqueue (found by
> Yuanhan Liu)
> - merge vhost_user_{read,write}() error checking patches
> - add error reporting to vhost_user_read() (similar to
> vhost_user_write())
> - add a vhost_net_set_backend() wrapper to help with potential crash
> - some leak fixes
>
> v2:
> - some patch ordering: minor fix, close(fd) fix,
> assert/fprintf->error_report, check and return error,
> vhost_dev_cleanup() fixes, keep vhost_net after a disconnect, wait
> until connection is ready
> - merge read/write error checks
> - do not rely on link state to check vhost-user init completed
>
> Marc-André Lureau (29):
> misc: indentation
> vhost-user: minor simplification
> vhost: don't assume opaque is a fd, use backend cleanup
> vhost: make vhost_log_put() idempotent
> vhost: assert the log was cleaned up
> vhost: fix cleanup on not fully initialized device
> vhost: make vhost_dev_cleanup() idempotent
> vhost-net: always call vhost_dev_cleanup() on failure
> vhost: fix calling vhost_dev_cleanup() after vhost_dev_init()
> vhost: do not assert() on vhost_ops failure
> vhost: use error_report() instead of fprintf(stderr,...)
> qemu-char: fix qemu_chr_fe_set_msgfds() crash when disconnected
> vhost-user: call set_msgfds unconditionally
> vhost-user: check qemu_chr_fe_set_msgfds() return value
> vhost-user: check vhost_user_{read,write}() return value
> vhost-user: keep vhost_net after a disconnection
> vhost-user: add get_vhost_net() assertions
> Revert "vhost-net: do not crash if backend is not present"
> vhost-net: vhost_migration_done is vhost-user specific
> vhost: add assert() to check runtime behaviour
> char: add chr_wait_connected callback
> char: add and use tcp_chr_wait_connected
> vhost-user: wait until backend init is completed
> tests: plug some leaks in virtio-net-test
> tests: fix vhost-user-test leak
> tests: add /vhost-user/connect-fail test
> tests: add a simple /vhost-user/multiqueue test
> vhost-user: add error report in vhost_user_write()
> vhost: add vhost_net_set_backend()
>
> hw/net/vhost_net.c | 34 ++++-------
> hw/virtio/vhost-user.c | 67 ++++++++++++++-------
> hw/virtio/vhost.c | 123 +++++++++++++++++++++++---------------
> include/hw/virtio/vhost.h | 4 ++
> include/sysemu/char.h | 8 +++
> net/tap.c | 1 +
> net/vhost-user.c | 60 +++++++++++--------
> qemu-char.c | 82 ++++++++++++++++++--------
> tests/Makefile.include | 2 +-
> tests/vhost-user-test.c | 147 +++++++++++++++++++++++++++++++++++++++++++++-
> tests/virtio-net-test.c | 12 +++-
> 11 files changed, 396 insertions(+), 144 deletions(-)
>
> --
> 2.9.0
prev parent reply other threads:[~2016-07-20 13:42 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-07 1:00 [Qemu-devel] [PATCH v4 00/29] vhost-user reconnect fixes marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 01/29] misc: indentation marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 02/29] vhost-user: minor simplification marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 03/29] vhost: don't assume opaque is a fd, use backend cleanup marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 04/29] vhost: make vhost_log_put() idempotent marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 05/29] vhost: assert the log was cleaned up marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 06/29] vhost: fix cleanup on not fully initialized device marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 07/29] vhost: make vhost_dev_cleanup() idempotent marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 08/29] vhost-net: always call vhost_dev_cleanup() on failure marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 09/29] vhost: fix calling vhost_dev_cleanup() after vhost_dev_init() marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 10/29] vhost: do not assert() on vhost_ops failure marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 11/29] vhost: use error_report() instead of fprintf(stderr, ...) marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 12/29] qemu-char: fix qemu_chr_fe_set_msgfds() crash when disconnected marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 13/29] vhost-user: call set_msgfds unconditionally marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 14/29] vhost-user: check qemu_chr_fe_set_msgfds() return value marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 15/29] vhost-user: check vhost_user_{read, write}() " marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 16/29] vhost-user: keep vhost_net after a disconnection marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 17/29] vhost-user: add get_vhost_net() assertions marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 18/29] Revert "vhost-net: do not crash if backend is not present" marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 19/29] vhost-net: vhost_migration_done is vhost-user specific marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 20/29] vhost: add assert() to check runtime behaviour marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 21/29] char: add chr_wait_connected callback marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 22/29] char: add and use tcp_chr_wait_connected marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 23/29] vhost-user: wait until backend init is completed marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 24/29] tests: plug some leaks in virtio-net-test marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 25/29] tests: fix vhost-user-test leak marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 26/29] tests: add /vhost-user/connect-fail test marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 27/29] tests: add a simple /vhost-user/multiqueue test marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 28/29] vhost-user: add error report in vhost_user_write() marcandre.lureau
2016-07-07 1:00 ` [Qemu-devel] [PATCH v4 29/29] vhost: add vhost_net_set_backend() marcandre.lureau
2016-07-07 11:20 ` [Qemu-devel] [PATCH v4 00/29] vhost-user reconnect fixes Marc-André Lureau
2016-07-20 13:41 ` Michael S. Tsirkin [this message]
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=20160720134151.GA7154@redhat.com \
--to=mst@redhat.com \
--cc=jonshin@cisco.com \
--cc=marcandre.lureau@redhat.com \
--cc=mukawa@igel.co.jp \
--cc=qemu-devel@nongnu.org \
--cc=victork@redhat.com \
--cc=yuanhan.liu@linux.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).