This fixes the problem that blockdev-create on a local file blocks the main loop despite being a background job. This was caused by file-posix preallocating the image with blocking syscalls rather than moving this to the thread pool and yielding the coroutine meanwhile.
v2: - Add locking to qcow2_co_discard() - Extra qcow2 fix and cleanup related to the locking code - Use tracked requests infrastructure for serialising I/O requests against truncate in newly allocated areas Kevin Wolf (6): qcow2: Fix qcow2_truncate() error return value block: Convert .bdrv_truncate callback to coroutine_fn qcow2: Remove coroutine trampoline for preallocate_co() block: Move bdrv_truncate() implementation to io.c block: Use tracked request for truncate file-posix: Make .bdrv_co_truncate asynchronous include/block/block.h | 4 + include/block/block_int.h | 7 +- include/block/raw-aio.h | 4 +- block.c | 64 +---------- block/copy-on-read.c | 8 +- block/crypto.c | 9 +- block/file-posix.c | 277 ++++++++++++++++++++++++++-------------------- block/file-win32.c | 6 +- block/gluster.c | 14 ++- block/io.c | 134 ++++++++++++++++++++++ block/iscsi.c | 8 +- block/nfs.c | 7 +- block/qcow2.c | 124 +++++++++------------ block/qed.c | 8 +- block/raw-format.c | 8 +- block/rbd.c | 8 +- block/sheepdog.c | 12 +- block/ssh.c | 6 +- 18 files changed, 405 insertions(+), 303 deletions(-) -- 2.13.6
