summaryrefslogtreecommitdiff
path: root/block/aio_task.c
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2020-01-28 16:09:28 +0100
committerKevin Wolf <kwolf@redhat.com>2020-02-18 10:53:56 +0100
commit7e6c4ff792734e196c8ca82564c56b5e7c6288ca (patch)
treea63eacfc9babc8c12024460cd035f1d15c61466b /block/aio_task.c
parenteed325b92c3e68417121ea23f96e33af6a4654ed (diff)
downloadqemu-7e6c4ff792734e196c8ca82564c56b5e7c6288ca.zip
mirror: Don't let an operation wait for itself
mirror_wait_for_free_in_flight_slot() just picks a random operation to wait for. However, when mirror_co_read() waits for free slots, its MirrorOp is already in s->ops_in_flight, so if not enough slots are immediately available, an operation can end up waiting for itself to complete, which results in a hang. Fix this by passing the current MirrorOp and skipping this operation when picking an operation to wait for. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1794692 Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com>
Diffstat (limited to 'block/aio_task.c')
0 files changed, 0 insertions, 0 deletions