Depends on Stefan's latest coroutine patches. This series makes qcow and qcow2 take advantage of the new coroutine infrastructure. Both formats used synchronous operations for accessing their metadata and blocked the guest CPU during that time. With coroutines, the I/O will happen asynchronously in the background and the CPU won't be blocked any more.
Kevin Wolf (10): block: Add bdrv_co_readv/writev block: Emulate AIO functions with bdrv_co_readv/writev block: Add bdrv_co_readv/writev emulation coroutines: Locks qcow2: Use coroutines qcow: Use coroutines async: Remove AsyncContext coroutines: Use one global bottom half for CoQueue posix-aio-compat: Allow read after EOF block: Use bdrv_co_* instead of synchronous versions in coroutines Makefile.objs | 4 +- async.c | 98 ++----------------- block.c | 271 ++++++++++++++++++++++++++++++++++++++++++++++-- block.h | 5 + block/qcow.c | 180 +++++++++++--------------------- block/qcow2-cluster.c | 26 ++--- block/qcow2.c | 240 ++++++++++++++++---------------------------- block/qcow2.h | 5 +- block/qed-table.c | 14 --- block/qed.c | 4 - block_int.h | 6 + linux-aio.c | 43 +------- posix-aio-compat.c | 30 ++++-- qemu-common.h | 4 - qemu-coroutine-int.h | 1 + qemu-coroutine-lock.c | 117 +++++++++++++++++++++ qemu-coroutine.h | 64 ++++++++++++ trace-events | 11 ++ 18 files changed, 659 insertions(+), 464 deletions(-) create mode 100644 qemu-coroutine-lock.c -- 1.7.6