From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44721) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Voz7n-0001W5-ME for qemu-devel@nongnu.org; Fri, 06 Dec 2013 12:23:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Voz7h-0001s6-NP for qemu-devel@nongnu.org; Fri, 06 Dec 2013 12:23:35 -0500 Received: from mx1.redhat.com ([209.132.183.28]:51423) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Voz7h-0001s1-Ff for qemu-devel@nongnu.org; Fri, 06 Dec 2013 12:23:29 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id rB6HNSCo007017 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Fri, 6 Dec 2013 12:23:29 -0500 From: Kevin Wolf Date: Fri, 6 Dec 2013 18:22:50 +0100 Message-Id: <1386350580-5666-10-git-send-email-kwolf@redhat.com> In-Reply-To: <1386350580-5666-1-git-send-email-kwolf@redhat.com> References: <1386350580-5666-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [RFC PATCH 09/19] block: write: Handle COR dependency after I/O throttling List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, pbonzini@redhat.com, armbru@redhat.com, stefanha@redhat.com 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 --- block.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/block.c b/block.c index 20ed857..f8ed623 100644 --- a/block.c +++ b/block.c @@ -2867,6 +2867,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); @@ -2918,10 +2922,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