Le Friday 17 Jan 2014 à 15:15:02 (+0100), Kevin Wolf a écrit : > 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 <kw...@redhat.com> > Reviewed-by: Max Reitz <mre...@redhat.com> > --- > block.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/block.c b/block.c > index 70b72f0..fe55217 100644 > --- a/block.c > +++ b/block.c > @@ -2979,6 +2979,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); > @@ -3028,10 +3032,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 > >
Reviewed-by: Benoit Canet <ben...@irqsave.net>