block: Don't poll in parent drain callbacks
commitdcf94a23b1add0f856db51e9ff5ba0774e096076
authorKevin Wolf <kwolf@redhat.com>
Fri, 23 Mar 2018 14:57:20 +0000 (23 15:57 +0100)
committerKevin Wolf <kwolf@redhat.com>
Mon, 18 Jun 2018 13:03:25 +0000 (18 15:03 +0200)
tree658311bddefe5487845018e8230a03c4d5d6435b
parentebd31837618cdc7bda83090773dcdd87475d55b7
block: Don't poll in parent drain callbacks

bdrv_do_drained_begin() is only safe if we have a single
BDRV_POLL_WHILE() after quiescing all affected nodes. We cannot allow
that parent callbacks introduce a nested polling loop that could cause
graph changes while we're traversing the graph.

Split off bdrv_do_drained_begin_quiesce(), which only quiesces a single
node without waiting for its requests to complete. These requests will
be waited for in the BDRV_POLL_WHILE() call down the call chain.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
block.c
block/io.c
include/block/block.h