On Mon, Aug 04, 2014 at 04:56:33PM +0100, Stefan Hajnoczi wrote: > If two Linux AIO request completions are fetched in the same > io_getevents() call, QEMU will deadlock if request A's callback waits > for request B to complete using an aio_poll() loop. This was reported > to happen with the mirror blockjob. > > This patch moves completion processing into a BH and makes it resumable. > Nested event loops can resume completion processing so that request B > will complete and the deadlock will not occur. > > Cc: Kevin Wolf <kw...@redhat.com> > Cc: Paolo Bonzini <pbonz...@redhat.com> > Cc: Ming Lei <ming....@canonical.com> > Cc: Marcin Gibuła <m.gib...@beyond.pl> > Reported-by: Marcin Gibuła <m.gib...@beyond.pl> > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> > --- > block/linux-aio.c | 71 > ++++++++++++++++++++++++++++++++++++++++++------------- > 1 file changed, 55 insertions(+), 16 deletions(-)
Applied to my block tree: https://github.com/stefanha/qemu/commits/block Stefan
pgpgbQK5UqTQw.pgp
Description: PGP signature