[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 12/22] block: write: Handle COR dependency after I/O
From: |
Kevin Wolf |
Subject: |
[Qemu-devel] [PATCH 12/22] block: write: Handle COR dependency after I/O throttling |
Date: |
Wed, 11 Dec 2013 22:08:19 +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 <address@hidden>
---
block.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/block.c b/block.c
index e26e31c..385fb8a 100644
--- a/block.c
+++ b/block.c
@@ -2973,6 +2973,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);
@@ -3022,10 +3026,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);
--
1.8.1.4
- [Qemu-devel] [PATCH 05/22] block: Detect unaligned length in bdrv_qiov_is_aligned(), (continued)
- [Qemu-devel] [PATCH 05/22] block: Detect unaligned length in bdrv_qiov_is_aligned(), Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 04/22] qemu_memalign: Allow small alignments, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 06/22] block: Don't use guest sector size for qemu_blockalign(), Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 01/22] block: Move initialisation of BlockLimits to bdrv_refresh_limits(), Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 03/22] block: Update BlockLimits when they might have changed, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 08/22] raw: Probe required direct I/O alignment, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 09/22] block: Introduce bdrv_aligned_preadv(), Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 07/22] block: rename buffer_alignment to guest_block_size, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 10/22] block: Introduce bdrv_co_do_preadv(), Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 11/22] block: Introduce bdrv_aligned_pwritev(), Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 12/22] block: write: Handle COR dependency after I/O throttling,
Kevin Wolf <=
- [Qemu-devel] [PATCH 13/22] block: Introduce bdrv_co_do_pwritev(), Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 14/22] block: Switch BdrvTrackedRequest to byte granularity, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 16/22] block: Make zero-after-EOF work with larger alignment, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 15/22] block: Allow waiting for overlapping requests between begin/end, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 17/22] block: Generalise and optimise COR serialisation, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 18/22] block: Make overlap range for serialisation dynamic, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 19/22] block: Align requests in bdrv_co_do_pwritev(), Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 20/22] block: Change coroutine wrapper to byte granularity, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 21/22] block: Make bdrv_pread() a bdrv_prwv_co() wrapper, Kevin Wolf, 2013/12/11
- [Qemu-devel] [PATCH 22/22] block: Make bdrv_pwrite() a bdrv_prwv_co() wrapper, Kevin Wolf, 2013/12/11