mirror_qemu/migration
Stefan Hajnoczi 17e2a4a47d migration: avoid recursive AioContext locking in save_vmstate()
AioContext was designed to allow nested acquire/release calls.  It uses
a recursive mutex so callers don't need to worry about nesting...or so
we thought.

BDRV_POLL_WHILE() is used to wait for block I/O requests.  It releases
the AioContext temporarily around aio_poll().  This gives IOThreads a
chance to acquire the AioContext to process I/O completions.

It turns out that recursive locking and BDRV_POLL_WHILE() don't mix.
BDRV_POLL_WHILE() only releases the AioContext once, so the IOThread
will not be able to acquire the AioContext if it was acquired
multiple times.

Instead of trying to release AioContext n times in BDRV_POLL_WHILE(),
this patch simply avoids nested locking in save_vmstate().  It's the
simplest fix and we should step back to consider the big picture with
all the recent changes to block layer threading.

This patch is the final fix to solve 'savevm' hanging with -object
iothread.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
2017-06-26 14:51:13 +02:00
..
Makefile.objs migration: create global_state.c 2017-06-13 11:00:45 +02:00
block.c block: protect modification of dirty bitmaps with a mutex 2017-06-16 07:55:00 +08:00
block.h migration: Move include/migration/block.h into migration/ 2017-06-01 18:49:24 +02:00
channel.c migration: Move migration.h to migration/ 2017-06-13 11:00:45 +02:00
channel.h migration: Remove MigrationState from migration_channel_incomming() 2017-06-13 11:00:44 +02:00
colo-comm.c migration: Move migration.h to migration/ 2017-06-13 11:00:45 +02:00
colo-failover.c migration: Remove unneeded includes 2017-06-14 11:10:19 +02:00
colo.c migration: Fix race of image locking between src and dst 2017-06-19 17:53:33 +01:00
exec.c migration: Remove unneeded includes 2017-06-14 11:10:19 +02:00
exec.h migration: Export exec.c functions in its own file 2017-06-01 18:49:22 +02:00
fd.c migration: Remove unneeded includes 2017-06-14 11:10:19 +02:00
fd.h migration: Export fd.c functions in its own file 2017-06-01 18:49:22 +02:00
global_state.c migration: Remove unneeded includes 2017-06-14 11:10:19 +02:00
migration.c migration: Fix race of image locking between src and dst 2017-06-19 17:53:33 +01:00
migration.h migration: Remove unneeded includes 2017-06-14 11:10:19 +02:00
page_cache.c migration: Move page_cache.c to migration/ 2017-05-17 12:04:59 +02:00
page_cache.h migration: Move page_cache.c to migration/ 2017-05-17 12:04:59 +02:00
postcopy-ram.c migration: Remove unneeded includes 2017-06-14 11:10:19 +02:00
postcopy-ram.h migration: Move postcopy stuff to postcopy-ram.c 2017-05-17 12:04:59 +02:00
qemu-file-channel.c migration: Split qemu-file.h 2017-06-01 18:49:22 +02:00
qemu-file-channel.h migration: Export qemu-file-channel.c functions in its own file 2017-05-18 19:20:50 +02:00
qemu-file.c migration: Remove unneeded includes 2017-06-14 11:10:19 +02:00
qemu-file.h migration: ram_control_* are implemented in qemu_file 2017-06-13 11:00:45 +02:00
qjson.c migration: Move qjson.h to migration/ 2017-05-18 19:20:59 +02:00
qjson.h migration: Move qjson.h to migration/ 2017-05-18 19:20:59 +02:00
ram.c migration: Don't create decompression threads if not enabled 2017-06-14 11:11:06 +02:00
ram.h ram: Use MigrationStats for statistics 2017-06-07 10:20:54 +02:00
rdma.c migration: Move migration.h to migration/ 2017-06-13 11:00:45 +02:00
rdma.h migration: Export rdma.c functions in its own file 2017-06-01 18:49:23 +02:00
savevm.c migration: avoid recursive AioContext locking in save_vmstate() 2017-06-26 14:51:13 +02:00
savevm.h migration: Fix race of image locking between src and dst 2017-06-19 17:53:33 +01:00
socket.c migration: Move migration.h to migration/ 2017-06-13 11:00:45 +02:00
socket.h migration: Export socket.c functions in its own file 2017-06-01 18:49:23 +02:00
tls.c migration: Move migration.h to migration/ 2017-06-13 11:00:45 +02:00
tls.h migration: Export tls.c functions in its own file 2017-06-01 18:49:23 +02:00
trace-events migration: isolate return path on src 2017-06-13 11:00:44 +02:00
vmstate-types.c migration: Move migration.h to migration/ 2017-06-13 11:00:45 +02:00
vmstate.c migration: Move migration.h to migration/ 2017-06-13 11:00:45 +02:00
xbzrle.c migration: Create migration/xbzrle.h 2017-05-18 18:04:54 +02:00
xbzrle.h migration: Create migration/xbzrle.h 2017-05-18 18:04:54 +02:00