]> Git Repo - qemu.git/commitdiff
block: write: Handle COR dependency after I/O throttling
authorKevin Wolf <[email protected]>
Tue, 3 Dec 2013 13:30:44 +0000 (14:30 +0100)
committerKevin Wolf <[email protected]>
Fri, 24 Jan 2014 16:40:02 +0000 (17:40 +0100)
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 <[email protected]>
Reviewed-by: Max Reitz <[email protected]>
Reviewed-by: Benoit Canet <[email protected]>
block.c

diff --git a/block.c b/block.c
index d9c472b2f85c48feaa5519edce7157612a167c61..20a38533ec9318adc05e591b66e3482ec486dcdd 100644 (file)
--- 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);
This page took 0.02711 seconds and 4 git commands to generate.