Commit bb9aaeca authored by Kevin Wolf's avatar Kevin Wolf
Browse files

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: default avatarStefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Acked-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent c2066af0
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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;