qemu/io
Eric Blake 199e84de1c qio: Inherit follow_coroutine_ctx across TLS
Since qemu 8.2, the combination of NBD + TLS + iothread crashes on an
assertion failure:

qemu-kvm: ../io/channel.c:534: void qio_channel_restart_read(void *): Assertion `qemu_get_current_aio_context() == qemu_coroutine_get_aio_context(co)' failed.

It turns out that when we removed AioContext locking, we did so by
having NBD tell its qio channels that it wanted to opt in to
qio_channel_set_follow_coroutine_ctx(); but while we opted in on the
main channel, we did not opt in on the TLS wrapper channel.
qemu-iotests has coverage of NBD+iothread and NBD+TLS, but apparently
no coverage of NBD+TLS+iothread, or we would have noticed this
regression sooner.  (I'll add that in the next patch)

But while we could manually opt in to the TLS channel in nbd/server.c
(a one-line change), it is more generic if all qio channels that wrap
other channels inherit the follow status, in the same way that they
inherit feature bits.

CC: Stefan Hajnoczi <stefanha@redhat.com>
CC: Daniel P. Berrangé <berrange@redhat.com>
CC: qemu-stable@nongnu.org
Fixes: https://issues.redhat.com/browse/RHEL-34786
Fixes: 06e0f098 ("io: follow coroutine AioContext in qio_channel_yield()", v8.2.0)
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-ID: <20240518025246.791593-5-eblake@redhat.com>
2024-05-29 18:30:31 -05:00
..
channel-buffer.c
channel-command.c
channel-file.c io: Introduce qio_channel_file_new_dupfd 2024-03-12 15:22:23 -04:00
channel-null.c
channel-socket.c
channel-tls.c qio: Inherit follow_coroutine_ctx across TLS 2024-05-29 18:30:31 -05:00
channel-util.c
channel-watch.c
channel-websock.c qio: Inherit follow_coroutine_ctx across TLS 2024-05-29 18:30:31 -05:00
channel.c io: Add generic pwritev/preadv interface 2024-03-01 15:42:04 +08:00
dns-resolver.c
meson.build
net-listener.c
task.c
trace-events
trace.h