OSDN Git Service

block: Remove aio_poll() in bdrv_drain_poll variants
authorKevin Wolf <kwolf@redhat.com>
Fri, 17 Aug 2018 12:58:49 +0000 (14:58 +0200)
committerKevin Wolf <kwolf@redhat.com>
Tue, 25 Sep 2018 13:50:15 +0000 (15:50 +0200)
commit4cf077b59fc73eec29f8b7d082919dbb278bdc86
tree70cc462429b98e283714581c87e62484c86db01a
parentb5a7a0573530698ee448b063ac01d485e30446bd
block: Remove aio_poll() in bdrv_drain_poll variants

bdrv_drain_poll_top_level() was buggy because it didn't release the
AioContext lock of the node to be drained before calling aio_poll().
This way, callbacks called by aio_poll() would possibly take the lock a
second time and run into a deadlock with a nested AIO_WAIT_WHILE() call.

However, it turns out that the aio_poll() call isn't actually needed any
more. It was introduced in commit 91af091f923, which is effectively
reverted by this patch. The cases it was supposed to fix are now covered
by bdrv_drain_poll(), which waits for block jobs to reach a quiescent
state.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
block/io.c