qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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

      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).