]> git.proxmox.com Git - mirror_qemu.git/commit - block/io.c
block: Don't manually poll in bdrv_drain_all()
authorKevin Wolf <kwolf@redhat.com>
Thu, 14 Dec 2017 10:25:16 +0000 (11:25 +0100)
committerKevin Wolf <kwolf@redhat.com>
Mon, 18 Jun 2018 13:03:25 +0000 (15:03 +0200)
commitc13ad59f012cbbccb866a10477458e69bc868dbb
tree8e1e5c96e0f1f98c19e5419fda528d2c26c2e4e4
parent7d40d9ef9dfb4948a857bfc6ec8408eed1d1d9e7
block: Don't manually poll in bdrv_drain_all()

All involved nodes are already idle, we called bdrv_do_drain_begin() on
them.

The comment in the code suggested that this was not correct because the
completion of a request on one node could spawn a new request on a
different node (which might have been drained before, so we wouldn't
drain the new request). In reality, new requests to different nodes
aren't spawned out of nothing, but only in the context of a parent
request, and they aren't submitted to random nodes, but only to child
nodes. As long as we still poll for the completion of the parent request
(which we do), draining each root node separately is good enough.

Remove the additional polling code from bdrv_drain_all_begin() and
replace it with an assertion that all nodes are already idle after we
drained them separately.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
block/io.c