From 244eadef5c797c674b0aef96366671be4b33d03a Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Tue, 3 Dec 2013 14:30:44 +0100 Subject: block: write: Handle COR dependency after I/O throttling First waiting for all COR requests to complete and calling the throttling function afterwards means that the request could be delayed and we still need to wait for the COR request even if it was issued only after the throttled write request. Signed-off-by: Kevin Wolf Reviewed-by: Max Reitz Reviewed-by: Benoit Canet --- block.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'block.c') diff --git a/block.c b/block.c index d9c472b2f8..20a38533ec 100644 --- a/block.c +++ b/block.c @@ -3159,6 +3159,10 @@ static int coroutine_fn bdrv_aligned_pwritev(BlockDriverState *bs, assert((offset & (BDRV_SECTOR_SIZE - 1)) == 0); assert((bytes & (BDRV_SECTOR_SIZE - 1)) == 0); + if (bs->copy_on_read_in_flight) { + wait_for_overlapping_requests(bs, sector_num, nb_sectors); + } + tracked_request_begin(&req, bs, sector_num, nb_sectors, true); ret = notifier_with_return_list_notify(&bs->before_write_notifiers, &req); @@ -3208,10 +3212,6 @@ static int coroutine_fn bdrv_co_do_writev(BlockDriverState *bs, return -EIO; } - if (bs->copy_on_read_in_flight) { - wait_for_overlapping_requests(bs, sector_num, nb_sectors); - } - /* throttling disk I/O */ if (bs->io_limits_enabled) { bdrv_io_limits_intercept(bs, nb_sectors, true); -- cgit v1.2.1