The ongoing QEMU multi-queue block layer effort makes it possible for multiple threads to process I/O in parallel. The nbd block driver is not compatible with the multi-queue block layer yet because QIOChannel cannot be used easily from coroutines running in multiple threads. This series changes the QIOChannel API to make that possible.
Stefan Hajnoczi (2): io: check there are no qio_channel_yield() coroutines during ->finalize() io: follow coroutine AioContext in qio_channel_yield() include/io/channel.h | 34 ++++++++- include/qemu/vhost-user-server.h | 1 + block/nbd.c | 11 +-- io/channel-command.c | 13 +++- io/channel-file.c | 18 ++++- io/channel-null.c | 3 +- io/channel-socket.c | 18 ++++- io/channel-tls.c | 6 +- io/channel.c | 124 ++++++++++++++++++++++--------- migration/channel-block.c | 3 +- nbd/client.c | 2 +- nbd/server.c | 14 +--- scsi/qemu-pr-helper.c | 4 +- util/vhost-user-server.c | 27 +++++-- 14 files changed, 195 insertions(+), 83 deletions(-) -- 2.41.0