]> git.ipfire.org Git - thirdparty/qemu.git/commit
qio: Inherit follow_coroutine_ctx across TLS
authorEric Blake <eblake@redhat.com>
Sat, 18 May 2024 02:50:14 +0000 (21:50 -0500)
committerEric Blake <eblake@redhat.com>
Wed, 29 May 2024 23:30:31 +0000 (18:30 -0500)
commit199e84de1c903ba5aa1f7256310bbc4a20dd930b
treeb7561cbb1e233f5ad73d78a54072f693b30852ea
parent3b2fe44bb7f605f179e5e7feb2c13c2eb3abbb80
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>
io/channel-tls.c
io/channel-websock.c