block: disable I/O limits at the beginning of bdrv_close()
Disabling I/O limits from a BDS also drains all pending throttled requests, so it should be done at the beginning of bdrv_close() with the rest of the bdrv_drain() calls before the BlockDriver is closed. Signed-off-by: Alberto Garcia <berto@igalia.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
bb3c801df7
commit
99b7e77567
11
block.c
11
block.c
@ -1907,6 +1907,12 @@ void bdrv_close(BlockDriverState *bs)
|
|||||||
if (bs->job) {
|
if (bs->job) {
|
||||||
block_job_cancel_sync(bs->job);
|
block_job_cancel_sync(bs->job);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Disable I/O limits and drain all pending throttled requests */
|
||||||
|
if (bs->io_limits_enabled) {
|
||||||
|
bdrv_io_limits_disable(bs);
|
||||||
|
}
|
||||||
|
|
||||||
bdrv_drain(bs); /* complete I/O */
|
bdrv_drain(bs); /* complete I/O */
|
||||||
bdrv_flush(bs);
|
bdrv_flush(bs);
|
||||||
bdrv_drain(bs); /* in case flush left pending I/O */
|
bdrv_drain(bs); /* in case flush left pending I/O */
|
||||||
@ -1958,11 +1964,6 @@ void bdrv_close(BlockDriverState *bs)
|
|||||||
blk_dev_change_media_cb(bs->blk, false);
|
blk_dev_change_media_cb(bs->blk, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*throttling disk I/O limits*/
|
|
||||||
if (bs->io_limits_enabled) {
|
|
||||||
bdrv_io_limits_disable(bs);
|
|
||||||
}
|
|
||||||
|
|
||||||
QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
|
QLIST_FOREACH_SAFE(ban, &bs->aio_notifiers, list, ban_next) {
|
||||||
g_free(ban);
|
g_free(ban);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user