[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 00/29] vhost-user reconnect fixes
From: |
marcandre . lureau |
Subject: |
[Qemu-devel] [PATCH v4 00/29] vhost-user reconnect fixes |
Date: |
Thu, 7 Jul 2016 03:00:24 +0200 |
From: Marc-André Lureau <address@hidden>
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
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
- [Qemu-devel] [PATCH v4 00/29] vhost-user reconnect fixes,
marcandre . lureau <=
- [Qemu-devel] [PATCH v4 01/29] misc: indentation, marcandre . lureau, 2016/07/06
- [Qemu-devel] [PATCH v4 03/29] vhost: don't assume opaque is a fd, use backend cleanup, marcandre . lureau, 2016/07/06
- [Qemu-devel] [PATCH v4 02/29] vhost-user: minor simplification, marcandre . lureau, 2016/07/06
- [Qemu-devel] [PATCH v4 04/29] vhost: make vhost_log_put() idempotent, marcandre . lureau, 2016/07/06
- [Qemu-devel] [PATCH v4 05/29] vhost: assert the log was cleaned up, marcandre . lureau, 2016/07/06
- [Qemu-devel] [PATCH v4 06/29] vhost: fix cleanup on not fully initialized device, marcandre . lureau, 2016/07/06
- [Qemu-devel] [PATCH v4 08/29] vhost-net: always call vhost_dev_cleanup() on failure, marcandre . lureau, 2016/07/06
- [Qemu-devel] [PATCH v4 09/29] vhost: fix calling vhost_dev_cleanup() after vhost_dev_init(), marcandre . lureau, 2016/07/06
- [Qemu-devel] [PATCH v4 07/29] vhost: make vhost_dev_cleanup() idempotent, marcandre . lureau, 2016/07/06
- [Qemu-devel] [PATCH v4 10/29] vhost: do not assert() on vhost_ops failure, marcandre . lureau, 2016/07/06