with test while /bin/true ; do virsh snapshot-create rhel7 sleep 10 virsh snapshot-delete rhel7 --current done with enabled iothreads on a running VM leads to a lot of troubles: hangs, asserts, errors.
Anyway, I think that the construction like assert(aio_context_is_locked(aio_context)); should be widely used to ensure proper locking. Patches 1-5 must be committed into QEMU 2.5. The rest is to be discussed and could be taken later. Though they are safe enough except (some) places where guard around bdrv_drain is necessary. Changes from v3: - more places found - new aio_poll concept, see patch 10 Changes from v2: - droppped patch 5 as already merged - changed locking scheme in patch 4 by suggestion of Juan Changes from v1: - aio-context locking added - comment is rewritten Signed-off-by: Denis V. Lunev <d...@openvz.org> CC: Stefan Hajnoczi <stefa...@redhat.com> CC: Paolo Bonzini <pbonz...@redhat.com> Denis V. Lunev (9): migration: add missed aio_context_acquire for state writing/reading block: add missed aio_context_acquire around bdrv_set_aio_context migration: added missed aio_context_acquire around bdrv_snapshot_delete block: guard bdrv_drain in bdrv_close with aio_context_acquire io: guard aio_poll with aio_context_acquire block: call aio_context_acquire in qemu_img/nbd/io fifolock: create rfifolock_is_owner helper aio_context: create aio_context_is_owner helper aio: change aio_poll constraints Stefan Hajnoczi (1): blockdev: acquire AioContext in hmp_commit() aio-posix.c | 11 +---------- aio-win32.c | 9 +-------- async.c | 5 +++++ block.c | 10 +++++++++- block/block-backend.c | 3 +++ block/curl.c | 3 +++ block/io.c | 11 +++++++++++ block/iscsi.c | 2 ++ block/nfs.c | 5 +++++ block/qed-table.c | 20 ++++++++++++++++---- block/sheepdog.c | 2 ++ blockdev.c | 12 +++++++++++- blockjob.c | 6 ++++++ include/block/aio.h | 5 +++++ include/qemu/rfifolock.h | 1 + migration/savevm.c | 28 +++++++++++++++++++++++++--- qemu-img.c | 2 ++ qemu-io-cmds.c | 6 +++++- qemu-io.c | 1 + qemu-nbd.c | 1 + tests/test-aio.c | 11 +++++++++++ tests/test-thread-pool.c | 15 +++++++++++++++ util/rfifolock.c | 12 +++++++++--- 23 files changed, 150 insertions(+), 31 deletions(-) -- 2.5.0