[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 4/7] vhost-user: Convert slave channel to QIOChannelSocket
From: |
Stefan Hajnoczi |
Subject: |
Re: [PATCH v2 4/7] vhost-user: Convert slave channel to QIOChannelSocket |
Date: |
Mon, 15 Mar 2021 10:37:46 +0000 |
On Fri, Mar 12, 2021 at 10:22:09AM +0100, Greg Kurz wrote:
> The slave channel is implemented with socketpair() : QEMU creates
> the pair, passes one of the socket to virtiofsd and monitors the
> other one with the main event loop using qemu_set_fd_handler().
>
> In order to fix a potential deadlock between QEMU and a vhost-user
> external process (e.g. virtiofsd with DAX), we want to be able to
> monitor and service the slave channel while handling vhost-user
> requests.
>
> Prepare ground for this by converting the slave channel to be a
> QIOChannelSocket. This will make monitoring of the slave channel
> as simple as calling qio_channel_add_watch_source(). Since the
> connection is already established between the two sockets, only
> incoming I/O (G_IO_IN) and disconnect (G_IO_HUP) need to be
> serviced.
>
> This also allows to get rid of the ancillary data parsing since
> QIOChannelSocket can do this for us. Note that the MSG_CTRUNC
> check is dropped on the way because QIOChannelSocket ignores this
> case. This isn't a problem since slave_read() provisions space for
> 8 file descriptors, but affected vhost-user slave protocol messages
> generally only convey one. If for some reason a buggy implementation
> passes more file descriptors, no need to break the connection, just
> like we don't break it if some other type of ancillary data is
> received : this isn't explicitely violating the protocol per-se so
> it seems better to ignore it.
>
> The current code errors out on short reads and writes. Use the
> qio_channel_*_all() variants to address this on the way.
>
> Signed-off-by: Greg Kurz <groug@kaod.org>
> ---
> v2: - also monitor G_IO_HUP (Stefan)
> - use the qio_channel_*_all() variants (Daniel)
> - simplified thanks to previous refactoring
> ---
> hw/virtio/vhost-user.c | 99 +++++++++++++++++-------------------------
> 1 file changed, 39 insertions(+), 60 deletions(-)
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
signature.asc
Description: PGP signature
- [PATCH v2 0/7] virtiofsd: Avoid potential deadlocks, Greg Kurz, 2021/03/12
- [PATCH v2 1/7] vhost-user: Drop misleading EAGAIN checks in slave_read(), Greg Kurz, 2021/03/12
- [PATCH v2 2/7] vhost-user: Fix double-close on slave_read() error path, Greg Kurz, 2021/03/12
- [PATCH v2 4/7] vhost-user: Convert slave channel to QIOChannelSocket, Greg Kurz, 2021/03/12
- Re: [PATCH v2 4/7] vhost-user: Convert slave channel to QIOChannelSocket,
Stefan Hajnoczi <=
- [PATCH v2 3/7] vhost-user: Factor out duplicated slave_fd teardown code, Greg Kurz, 2021/03/12
- [PATCH v2 6/7] vhost-user: Monitor slave channel in vhost_user_read(), Greg Kurz, 2021/03/12
- [PATCH v2 5/7] vhost-user: Introduce nested event loop in vhost_user_read(), Greg Kurz, 2021/03/12
- [PATCH v2 7/7] virtiofsd: Release vu_dispatch_lock when stopping queue, Greg Kurz, 2021/03/12