]> git.proxmox.com Git - mirror_qemu.git/commit
block: make BDRV_POLL_WHILE() re-entrancy safe
authorStefan Hajnoczi <stefanha@redhat.com>
Wed, 7 Mar 2018 12:46:19 +0000 (12:46 +0000)
committerStefan Hajnoczi <stefanha@redhat.com>
Mon, 12 Mar 2018 11:07:37 +0000 (11:07 +0000)
commit7376eda7c2e0451e819e81bd05fabc56a9deb946
treec5a89490ebd3871f68331544ad39567ca4f0e832
parente4ae62b802cec437f877f2cadc4ef059cc0eca76
block: make BDRV_POLL_WHILE() re-entrancy safe

Nested BDRV_POLL_WHILE() calls can occur.  Currently
assert(!wait_->wakeup) fails in AIO_WAIT_WHILE() when this happens.

This patch converts the bool wait_->need_kick flag to an unsigned
wait_->num_waiters counter.

Nesting works correctly because outer AIO_WAIT_WHILE() callers evaluate
the condition again after the inner caller completes (invoking the inner
caller counts as aio_poll() progress).

Reported-by: "fuweiwei (C)" <fuweiwei2@huawei.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 20180307124619.6218-1-stefanha@redhat.com
Cc: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
include/block/aio-wait.h
util/aio-wait.c