]> git.proxmox.com Git - mirror_qemu.git/commitdiff
block/io: Quiesce parents between drained_begin/end
authorKevin Wolf <kwolf@redhat.com>
Wed, 11 May 2016 12:57:23 +0000 (14:57 +0200)
committerKevin Wolf <kwolf@redhat.com>
Thu, 19 May 2016 14:45:30 +0000 (16:45 +0200)
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>
block/io.c

index 7c213ec226abf7f272db79f0258c3e861a946c91..23abbc52fe0d6fcc467346c7bea80270e5504424 100644 (file)
@@ -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;