From nobody Fri May 17 05:00:00 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1620806277; cv=none; d=zohomail.com; s=zohoarc; b=glEVFXWV7DfnxoGOM6hzt+shm4ZbD4JZIG/OATjd7f1R2OpV9bPZ7/RqeOEGV9bAsY/pWqMAmtmswrGViVwQdc9s+FZ8nTg6F0vG11JMnOD1rZEe4BGztLxqaT4e1ta36Usv6PCLEpA7NSSqOui8T6LUAfbS2AqH9NhNt3wbgdA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1620806277; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=r8ZkqGjRovjbmk9zRfiWENqxZn9BahB5MylZFK19BWE=; b=UF+XOCvPidy+vwDy6KYQf9/QjPuslFS7ouF0gdVoX3h+5LInP6VQSHjRv2kEX3Sar6fSkHzRTa1Fle/e5eVdSA9CGAxk6z4gg29/pcV6YwfSdMNx2nB0CFeenDfHhu0sydCtiTMPkbUDMWbQJvEAdOiVy8k/+qGX3xPUDWjMki4= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1620806277600598.5790947047253; Wed, 12 May 2021 00:57:57 -0700 (PDT) Received: from localhost ([::1]:38626 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lgjkh-0007Jf-F2 for importer@patchew.org; Wed, 12 May 2021 03:57:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58394) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lgjjb-0006QR-G6; Wed, 12 May 2021 03:56:48 -0400 Received: from mga06.intel.com ([134.134.136.31]:10029) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lgjjY-0000o7-4y; Wed, 12 May 2021 03:56:46 -0400 Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2021 00:56:37 -0700 Received: from unknown (HELO localhost.localdomain) ([10.239.13.19]) by fmsmga006-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 May 2021 00:56:34 -0700 IronPort-SDR: gHfXWQ6K5toM3zoQIAMUQ/LM+hIur96c21hn2V+chq3Kq4vIc58bkE16OA8e9nH7Xuy7Jbbnwj v9Ymik+VS8Uw== X-IronPort-AV: E=McAfee;i="6200,9189,9981"; a="260896502" X-IronPort-AV: E=Sophos;i="5.82,293,1613462400"; d="scan'208";a="260896502" IronPort-SDR: GAu5cFX586Z6un9oIR5Y/8apmA66pah3ixsFJcP+adTM0yDjHH2Uhxg4E/k2Mazeqs2mq+Fp7c eYINWM8Fc/Jw== X-IronPort-AV: E=Sophos;i="5.82,293,1613462400"; d="scan'208";a="622210758" From: Zhang Chen To: Kevin Wolf , Max Reitz , Stefan Hajnoczi , Fam Zheng , qemu-dev , qemu-block Subject: [RFC PATCH] block/io.c: Flush parent for quorum in generic code Date: Wed, 12 May 2021 15:49:57 +0800 Message-Id: <20210512074957.763711-1-chen.zhang@intel.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=134.134.136.31; envelope-from=chen.zhang@intel.com; helo=mga06.intel.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: Zhang Chen , Minghao Yuan , Zhang Chen Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Fix the issue from this patch: [PATCH] block: Flush all children in generic code From 883833e29cb800b4d92b5d4736252f4004885191 Quorum driver do not have the primary child. It will caused guest block flush issue when use quorum and NBD. The vm guest flushes failed=EF=BC=8Cand then guest filesystem is shutdown. Signed-off-by: Zhang Chen Reported-by: Minghao Yuan --- block/io.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/block/io.c b/block/io.c index 35b6c56efc..4dc1873cb9 100644 --- a/block/io.c +++ b/block/io.c @@ -2849,6 +2849,13 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs) BdrvChild *child; int current_gen; int ret =3D 0; + bool no_primary_child =3D false; + + /* Quorum drivers do not have the primary child. */ + if (!primary_child) { + primary_child =3D bs->file; + no_primary_child =3D true; + } =20 bdrv_inc_in_flight(bs); =20 @@ -2886,12 +2893,12 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs) =20 /* But don't actually force it to the disk with cache=3Dunsafe */ if (bs->open_flags & BDRV_O_NO_FLUSH) { - goto flush_children; + goto flush_data; } =20 /* Check if we really need to flush anything */ if (bs->flushed_gen =3D=3D current_gen) { - goto flush_children; + goto flush_data; } =20 BLKDBG_EVENT(primary_child, BLKDBG_FLUSH_TO_DISK); @@ -2938,13 +2945,19 @@ int coroutine_fn bdrv_co_flush(BlockDriverState *bs) /* Now flush the underlying protocol. It will also have BDRV_O_NO_FLU= SH * in the case of cache=3Dunsafe, so there are no useless flushes. */ -flush_children: - ret =3D 0; - QLIST_FOREACH(child, &bs->children, next) { - if (child->perm & (BLK_PERM_WRITE | BLK_PERM_WRITE_UNCHANGED)) { - int this_child_ret =3D bdrv_co_flush(child->bs); - if (!ret) { - ret =3D this_child_ret; +flush_data: + if (no_primary_child) { + /* Flush parent */ + ret =3D bs->file ? bdrv_co_flush(bs->file->bs) : 0; + } else { + /* Flush childrens */ + ret =3D 0; + QLIST_FOREACH(child, &bs->children, next) { + if (child->perm & (BLK_PERM_WRITE | BLK_PERM_WRITE_UNCHANGED))= { + int this_child_ret =3D bdrv_co_flush(child->bs); + if (!ret) { + ret =3D this_child_ret; + } } } } --=20 2.25.1