From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:55353) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1agOKB-0002K6-HN for qemu-devel@nongnu.org; Wed, 16 Mar 2016 23:10:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1agOK7-0006Mg-H6 for qemu-devel@nongnu.org; Wed, 16 Mar 2016 23:10:11 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38183) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1agOK7-0006ML-Be for qemu-devel@nongnu.org; Wed, 16 Mar 2016 23:10:07 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id BAD3B165ECA for ; Thu, 17 Mar 2016 03:10:06 +0000 (UTC) Date: Thu, 17 Mar 2016 11:10:05 +0800 From: Fam Zheng Message-ID: <20160317031004.GL23821@ad.usersys.redhat.com> References: <1458137817-15383-1-git-send-email-pbonzini@redhat.com> <1458137817-15383-8-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1458137817-15383-8-git-send-email-pbonzini@redhat.com> Subject: Re: [Qemu-devel] [PATCH v2 07/16] block: change drain to look only at one child at a time List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: qemu-devel@nongnu.org, stefanha@redhat.com On Wed, 03/16 15:16, Paolo Bonzini wrote: > bdrv_requests_pending is checking children to also wait until internal > requests (such as metadata writes) have completed. However, checking > children is in general overkill. Children requests can be of two kinds: > > - requests caused by an operation on bs, e.g. a bdrv_aio_write to bs > causing a write to bs->file->bs. In this case, the parent's in_flight > count will always be incremented by at least one for every request in > the child. > > - asynchronous metadata writes or flushes. Such writes can be started > even if bs's in_flight count is zero, but not after the .bdrv_drain > callback has been invoked. > > This patch therefore changes bdrv_drain to finish I/O in the parent > (after which the parent's in_flight will be locked to zero), call > bdrv_drain (after which the parent will not generate I/O on the child > anymore), and then wait for internal I/O in the children to complete. > > Signed-off-by: Paolo Bonzini > --- > v1->v2: moved bdrv_drain callback after in_flight is 0 > in the parent [from QED drain discussion] This is nice! Reviewed-by: Fam Zheng