This series rewrites the io_submit code to avoid having to synchronize the iocbs in two places (qemu_laiocb and LaioQueue). Instead, the queue of pending I/O requests is kept in a list.
This fixes the problems with io_submit doing partial submissions or failing with EAGAIN, without complicating the code. The bug is shown by "qemu-img bench -n -t none -s 65536 -d 1024 -c 100000" pretty much instantly. Paolo v1->v2: add patch 4, and fix QSIMPLEQ_SPLIT_AFTER Paolo Bonzini (5): linux-aio: queue requests that cannot be submitted linux-aio: track whether the queue is blocked linux-aio: rename LaioQueue idx field to "n" linux-aio: drop return code from laio_io_unplug and ioq_submit linux-aio: simplify removal of completed iocbs from the list block/linux-aio.c | 99 ++++++++++++++++++++++++---------------------------- block/raw-aio.h | 2 +- include/qemu/queue.h | 11 ++++++ 3 files changed, 58 insertions(+), 54 deletions(-) -- 2.1.0