On 05/17/2017 12:09 PM, Stefan Hajnoczi wrote: > 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 <stefa...@redhat.com> > --- > migration/savevm.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) >
Reviewed-by: Eric Blake <ebl...@redhat.com> -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
signature.asc
Description: OpenPGP digital signature