From patchwork Fri Jul 19 09:26:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Max Reitz X-Patchwork-Id: 11049897 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1A72A13BD for ; Fri, 19 Jul 2019 09:26:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0230E287FB for ; Fri, 19 Jul 2019 09:26:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EAB4828841; Fri, 19 Jul 2019 09:26:49 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.2 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 9066A287FB for ; Fri, 19 Jul 2019 09:26:49 +0000 (UTC) Received: from localhost ([::1]:43302 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hoPA8-0002wI-DB for patchwork-qemu-devel@patchwork.kernel.org; Fri, 19 Jul 2019 05:26:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37585) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hoP9r-0001ts-O6 for qemu-devel@nongnu.org; Fri, 19 Jul 2019 05:26:32 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hoP9q-0005pE-NK for qemu-devel@nongnu.org; Fri, 19 Jul 2019 05:26:31 -0400 Received: from mx1.redhat.com ([209.132.183.28]:51280) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hoP9o-0005jC-5I; Fri, 19 Jul 2019 05:26:28 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B9E9CB2CD; Fri, 19 Jul 2019 09:26:23 +0000 (UTC) Received: from localhost (unknown [10.40.205.128]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E875B1001B14; Fri, 19 Jul 2019 09:26:20 +0000 (UTC) From: Max Reitz To: qemu-block@nongnu.org Date: Fri, 19 Jul 2019 11:26:08 +0200 Message-Id: <20190719092618.24891-1-mreitz@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 19 Jul 2019 09:26:23 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v3 00/10] block: Delay poll when ending drained sections X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , qemu-devel@nongnu.org, Stefan Hajnoczi , Max Reitz Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Hi, This series: (1) Keeps patch 1, as the previous series, and (2) Decides whether all *drained_end* functions should poll or not; as proposed by Kevin, all that should not poll now get a @drained_end_counter pointer, whose pointee they have to increment once for every background operation scheduled, and that background operation will decrement it once it settles. This allows functions that should poll to do so until the counter reaches 0, so they don’t have to poll after scheduling every single operation but can do so once in a place where it’s safe. v3: - Change the design as described above (drained_end_counter instead of a list of BdrvCoDrainData objects to poll) - Added a test to test-bdrv-drain git-backport-diff against v2: Key: [----] : patches are identical [####] : number of functional differences between upstream/downstream patch [down] : patch is downstream-only The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively 001/10:[----] [--] 'block: Introduce BdrvChild.parent_quiesce_counter' 002/10:[down] 'tests: Add job commit by drained_end test' 003/10:[down] 'block: Add @drained_end_counter to bdrv_drain_invoke()' 004/10:[down] 'block: Make bdrv_parent_drained_[^_]*() static' 005/10:[down] 'tests: Lock AioContexts in test-block-iothread' 006/10:[down] 'block: Only poll once in bdrv_drained_end()' 007/10:[down] 'tests: Extend commit by drained_end test' 008/10:[down] 'block: Loop unsafely in bdrv*drained_end()' 009/10:[----] [--] 'iotests: Add @has_quit to vm.shutdown()' 010/10:[----] [--] 'iotests: Test commit with a filter on the chain' Max Reitz (10): block: Introduce BdrvChild.parent_quiesce_counter tests: Add job commit by drained_end test block: Add @drained_end_counter block: Make bdrv_parent_drained_[^_]*() static tests: Lock AioContexts in test-block-iothread block: Do not poll in bdrv_do_drained_end() tests: Extend commit by drained_end test block: Loop unsafely in bdrv*drained_end() iotests: Add @has_quit to vm.shutdown() iotests: Test commit with a filter on the chain include/block/block.h | 42 +++++++---- include/block/block_int.h | 15 +++- block.c | 52 ++++++++----- block/block-backend.c | 6 +- block/io.c | 134 +++++++++++++++++++++++--------- blockjob.c | 2 +- tests/test-bdrv-drain.c | 147 ++++++++++++++++++++++++++++++++++++ tests/test-block-iothread.c | 40 ++++++---- python/qemu/machine.py | 5 +- tests/qemu-iotests/040 | 40 +++++++++- tests/qemu-iotests/040.out | 4 +- tests/qemu-iotests/255 | 2 +- 12 files changed, 397 insertions(+), 92 deletions(-)