summaryrefslogtreecommitdiff
path: root/block
diff options
context:
space:
mode:
authorKevin Wolf <kwolf@redhat.com>2016-05-11 14:57:23 +0200
committerKevin Wolf <kwolf@redhat.com>2016-05-19 16:45:30 +0200
commitbb9aaecaf1d9b9d7da8f8c73a4cbf3afd9848abe (patch)
treeb104272631bfecd77dae99b9f8b9c84cb93c7d52 /block
parentc2066af0514d80a805dac82accaec1121babfa15 (diff)
downloadqemu-bb9aaecaf1d9b9d7da8f8c73a4cbf3afd9848abe.tar.gz
qemu-bb9aaecaf1d9b9d7da8f8c73a4cbf3afd9848abe.tar.bz2
qemu-bb9aaecaf1d9b9d7da8f8c73a4cbf3afd9848abe.zip
block/io: Quiesce parents between drained_begin/end
So far, bdrv_parent_drained_begin/end() was called for the duration of the actual bdrv_drain() at the beginning of a drained section, but we really should keep parents quiesced until the end of the drained section. This does not actually change behaviour at this point because the only user of the .drained_begin/end BdrvChildRole callback is I/O throttling, which already doesn't send any new requests after flushing its queue in .drained_begin. The patch merely removes a trap for future users. Reported-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> Acked-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'block')
-rw-r--r--block/io.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/block/io.c b/block/io.c
index 7c213ec226..23abbc52fe 100644
--- a/block/io.c
+++ b/block/io.c
@@ -2749,11 +2749,14 @@ void bdrv_drained_begin(BlockDriverState *bs)
if (!bs->quiesce_counter++) {
aio_disable_external(bdrv_get_aio_context(bs));
}
+ bdrv_parent_drained_begin(bs);
bdrv_drain(bs);
}
void bdrv_drained_end(BlockDriverState *bs)
{
+ bdrv_parent_drained_end(bs);
+
assert(bs->quiesce_counter > 0);
if (--bs->quiesce_counter > 0) {
return;