From nobody Sat May 18 23:44:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586338452963827.3135073535248; Wed, 8 Apr 2020 02:34:12 -0700 (PDT) Received: from localhost ([::1]:33248 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM763-0001EZ-K3 for importer@patchew.org; Wed, 08 Apr 2020 05:34:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39464) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM73G-0007kG-EX for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jM73E-0005xG-P7 for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:18 -0400 Received: from mail-ve1eur01on0705.outbound.protection.outlook.com ([2a01:111:f400:fe1f::705]:64128 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jM739-0005tu-Qz; Wed, 08 Apr 2020 05:31:11 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (10.141.175.15) by AM7PR08MB5365.eurprd08.prod.outlook.com (10.141.173.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Wed, 8 Apr 2020 09:31:07 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf%8]) with mapi id 15.20.2878.021; Wed, 8 Apr 2020 09:31:07 +0000 Received: from kvm.sw.ru (185.215.60.139) by AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Wed, 8 Apr 2020 09:31:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m5Nxpv6Q+iCNN4Z71llxLJv2zMeWU5jLpj3cV8OfTV5CRxLIryd5Gm69h1T0aAUPzebto+QQ5aofNMJFZ+76HEyiUh7zSZuxyyCA8tDpO4svu3SFYJSPgT7CYpHXDeJeyMhU4+QL1pH/aq7AMUY1eu4HrkfIh9Qr6gQp198pSMmcpzEqsDv03hQdHOi2Uhup2sCcfRAcb1zP2Ca51/6oXAJcruqM173b0M88Rj9ShkXGRM5T6zDN0vCPKkbf5628QjSPvdmMAltcmOt8IceXLu7FjZbiARgMvc737MecSZk/F4rHT59MbY/Z31DXFKGNrA2JELKSaFCUSyIPTMykyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6xRroGXi48EF1CjEFO5AZmDXmUHSxujtVJh2Wh8ot/M=; b=mRKpj66utrXf85odtdR7qER2Ru4vMhrX/geS9tZ947jeziVZy+wkEK1gnQUDZb+MDwjqdpTYMu1Fk0/jYE/GKq1M0j6dCHqQN02EyJtD5UtL7h12b5C/mzp/+pWMN8avLjdUIuPavparAikCJMwh+GVAt0lywB4yMZnpnQb4GHktUoBxjs5lxSSudtgXnBhYSDlB1ddWE5N7/51tYFunT5n/9zEpYaN3ivRCbedKYu7mpgFQY2rxg2qsWaqNRJJ8B1roWBLIBotp7QIjaRM1vvyt8O10S+UZAo2lLsedrRO6KMsZc6Ktpj1VKu9mGlUqUqlVNZBQ+/vXe1KJcvVWjQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6xRroGXi48EF1CjEFO5AZmDXmUHSxujtVJh2Wh8ot/M=; b=UEqW3CIPqUNW2ULNY2q5hnw86XuYgjX2G7UTwJ17r22s9hn4Jd56ln0N8bbpZ8IYVbq+QNC0/fBwogTrO0HZQD9WjwUaALjEEIE/P048R8CECK6d6/NC6MpLLCkPBLiIQ6rC3ZzPyWCmKhXkZxhLXWGXN/nBOWpBnYMFYNsuwoQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 1/9] block/io: refactor bdrv_is_allocated_above to run only one coroutine Date: Wed, 8 Apr 2020 12:30:43 +0300 Message-ID: <20200408093051.9893-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200408093051.9893-1-vsementsov@virtuozzo.com> References: <20200408093051.9893-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.139] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b1f80073-1ac4-44c7-344a-08d7db9f90fa X-MS-TrafficTypeDiagnostic: AM7PR08MB5365: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5236; X-Forefront-PRVS: 0367A50BB1 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(4636009)(396003)(346002)(136003)(39840400004)(366004)(376002)(52116002)(6506007)(5660300002)(2906002)(6916009)(2616005)(956004)(478600001)(16526019)(186003)(26005)(86362001)(66946007)(66556008)(66476007)(1076003)(6512007)(6486002)(107886003)(4326008)(6666004)(36756003)(8676002)(316002)(8936002)(81156014)(81166007); DIR:OUT; SFP:1102; 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: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: YnxsP9Q0ptnNvwx0DTGzP5cQ125DvjFTaMvZsjzOY3WNyIGMUcG3XHx2y/g95ZTSxaMFpuO+GmSfO2ShZ3BG0SriBGzjvi4GZBGwFcR2vexk9SConyUlq0AlWDG3WsyUUqpyKrqO1yrq+19JKLrQY6qyugCXSbrxSQ7N2oasDEWXF+SjsYMSNI0vkEybJs4JMYiSq8aJ+x14XiCq7YTBEOR7QQiDGGRXCjMWxxIStw7tSsU+ky8RbdUFRzaLGu+w2uwLLkcxB9c31Q7Ufq0RF54zWwuPr83BQsQVsqWSJG81YDlLkR6vl7weOCQhypa3pqkLOYphcWGpP1McEWhPXHNQrnTuB25oC5U3e3lUvAR8UWPYrG2Lq1EdoamkEAlcb5jOVg+Zek5J+PCSZfATeyMY145dY7JIFBJ6iSXMuLeRxJDw8dj6jtBIkzrazFoH X-MS-Exchange-AntiSpam-MessageData: MGRbPfAKRhloLtRw3xm6mo4UgiFJq/t1ksyKbuxMoncdz+oAi5tE3Tvl42bD7QxaRU0WPudBibG4L3Qaw2eW+PO75BILOZeIvJUUaQEQUkAz/xCSDg7rTxBbGOsjl90dLtfAbSc4j9SSiovtriqtgQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: b1f80073-1ac4-44c7-344a-08d7db9f90fa X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2020 09:31:07.6805 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: EBJQH6WbRohbbHdh9ZfTfg1G72g05zKZ0UQQgnwF6dp4Sbix5Wcelw52v3gmFjY+e66aoNlhBGWp4TgXpr7sAb44iDgcYGK2os/wYcbjPF8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5365 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a01:111:f400:fe1f::705 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: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" bdrv_is_allocated_above creates new coroutine on each iteration if called from non-coroutine context. To simplify expansion of in_flight inc/dec sections in further patch let's refactor it. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/io.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 5 deletions(-) diff --git a/block/io.c b/block/io.c index aba67f66b9..a9f1a3e93e 100644 --- a/block/io.c +++ b/block/io.c @@ -2482,6 +2482,22 @@ static int coroutine_fn bdrv_co_block_status_above(B= lockDriverState *bs, return ret; } =20 +static int coroutine_fn bdrv_co_is_allocated(BlockDriverState *bs, + int64_t offset, int64_t bytes, + int64_t *pnum) +{ + int ret; + int64_t dummy; + + ret =3D bdrv_co_block_status_above(bs, backing_bs(bs), false, offset, + bytes, pnum ? pnum : &dummy, NULL, + NULL); + if (ret < 0) { + return ret; + } + return !!(ret & BDRV_BLOCK_ALLOCATED); +} + /* Coroutine wrapper for bdrv_block_status_above() */ static void coroutine_fn bdrv_block_status_above_co_entry(void *opaque) { @@ -2578,10 +2594,10 @@ int coroutine_fn bdrv_is_allocated(BlockDriverState= *bs, int64_t offset, * but 'pnum' will only be 0 when end of file is reached. * */ -int bdrv_is_allocated_above(BlockDriverState *top, - BlockDriverState *base, - bool include_base, int64_t offset, - int64_t bytes, int64_t *pnum) +static int coroutine_fn +bdrv_co_is_allocated_above(BlockDriverState *top, BlockDriverState *base, + bool include_base, int64_t offset, int64_t byte= s, + int64_t *pnum) { BlockDriverState *intermediate; int ret; @@ -2595,7 +2611,7 @@ int bdrv_is_allocated_above(BlockDriverState *top, int64_t size_inter; =20 assert(intermediate); - ret =3D bdrv_is_allocated(intermediate, offset, bytes, &pnum_inter= ); + ret =3D bdrv_co_is_allocated(intermediate, offset, bytes, &pnum_in= ter); if (ret < 0) { return ret; } @@ -2624,6 +2640,57 @@ int bdrv_is_allocated_above(BlockDriverState *top, return 0; } =20 +typedef struct BdrvCoIsAllocatedAboveData { + BlockDriverState *top; + BlockDriverState *base; + bool include_base; + int64_t offset; + int64_t bytes; + int64_t *pnum; + int ret; + bool done; +} BdrvCoIsAllocatedAboveData; + +static void coroutine_fn bdrv_is_allocated_above_co_entry(void *opaque) +{ + BdrvCoIsAllocatedAboveData *data =3D opaque; + + data->ret =3D bdrv_co_is_allocated_above(data->top, data->base, + data->include_base, + data->offset, data->bytes, + data->pnum); + data->done =3D true; + aio_wait_kick(); +} + +int coroutine_fn +bdrv_is_allocated_above(BlockDriverState *top, BlockDriverState *base, + bool include_base, int64_t offset, int64_t bytes, + int64_t *pnum) +{ + Coroutine *co; + BdrvCoIsAllocatedAboveData data =3D { + .top =3D top, + .base =3D base, + .include_base =3D include_base, + .offset =3D offset, + .bytes =3D bytes, + .pnum =3D pnum, + .done =3D false, + }; + + if (qemu_in_coroutine()) { + /* Fast-path if already in coroutine context */ + bdrv_is_allocated_above_co_entry(&data); + } else { + co =3D qemu_coroutine_create(bdrv_is_allocated_above_co_entry, &da= ta); + bdrv_coroutine_enter(top, co); + BDRV_POLL_WHILE(top, !data.done); + } + + return data.ret; +} + typedef struct BdrvVmstateCo { BlockDriverState *bs; QEMUIOVector *qiov; --=20 2.21.0 From nobody Sat May 18 23:44:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 158633843249358.57851441281798; Wed, 8 Apr 2020 02:33:52 -0700 (PDT) Received: from localhost ([::1]:33246 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM75j-00015W-B6 for importer@patchew.org; Wed, 08 Apr 2020 05:33:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39463) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM73G-0007kF-EP for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jM73E-0005x4-Oh for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:18 -0400 Received: from mail-ve1eur01on0705.outbound.protection.outlook.com ([2a01:111:f400:fe1f::705]:64128 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jM73B-0005tu-9j; Wed, 08 Apr 2020 05:31:13 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (10.141.175.15) by AM7PR08MB5365.eurprd08.prod.outlook.com (10.141.173.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Wed, 8 Apr 2020 09:31:08 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf%8]) with mapi id 15.20.2878.021; Wed, 8 Apr 2020 09:31:08 +0000 Received: from kvm.sw.ru (185.215.60.139) by AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Wed, 8 Apr 2020 09:31:07 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e4ChCJ4+tmnM6TaC+XtL/oVleFlzSPslvOwMk8Z/FmBposX3LxF7zXV161ndmTb0I2PszSbakcVsb3T6zah3vA7OS/5SU8h4kzjK/cI38fZId9rqAtT6EKFQaEdu2rLKe4c+K4EhN9+mM3wX3426TO1nTQXBf1HKSuXuY+RDVqLZypJCd3N8D6wLhvG7ts2fDCxz2uup9mQqac3oCtF2ZgSKH5DMhuvvF58HCqB+0x/LFkvrljvzPSddPtzF/OL3Fq/Ui98PoTvdxeanogY1oimFtPfz73k4j9S7UYQ2TcOtjdehvmdPSJWJkIAZfuqTaxLYGPjrbTjsRlBl+fFZ0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=i2vpKMkvqCGmyV0Ot0mi3MdQNqcNS7JwiUqCB9yJwJ0=; b=n15FjFTn43TpK1SU26xfi7v7CnkfUdRhIK0yLIvU5ncnuSAMxLeVQUxZaNOs1+OoIh3/WEHWlFIwfBOnnXHeNgYuB8lx/xgsJVfw8czFFfaoVEl87VdBQiUjjVOFcZenOILC3C2ERGlV9TGAwvBmncg/wXq8N4F5NodS/Gdfpv4NzaR+lShDnI0bNWDxgWlXN7ZUvJAzDuEI8Gm6zBbHCNu4hRBjzir2skiKEU6veJ3mTTlSrP0qlGzrjab0wHOuL+kQ0Z3LbSId/rFq2V5flPh+/dO4vPvGgV0guBjgO8Q//0jXjdUpSX327PJ+ByNjHDaaaIfiWD7xptczCJJPBg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=i2vpKMkvqCGmyV0Ot0mi3MdQNqcNS7JwiUqCB9yJwJ0=; b=Hv9n/doAzrZLDte+yl4VasVi4H46Pj+WJAITVCHfO0XOmaJ3ad+kkWgGvWehon9B/BSgyCKej+xu1Z1BsW4yXIk/xRBzgfulqW7HYVplWVYZ1WjaQLmjv/QMbUrj0b8wUv05TcYAwPalJrWqh6vozXcszyCfGXPlFv3Rmf9Anpo= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 2/9] block/io: refactor bdrv_co_ioctl: move aio stuff to corresponding block Date: Wed, 8 Apr 2020 12:30:44 +0300 Message-ID: <20200408093051.9893-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200408093051.9893-1-vsementsov@virtuozzo.com> References: <20200408093051.9893-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.139] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a34666be-72f8-4f32-c73f-08d7db9f9176 X-MS-TrafficTypeDiagnostic: AM7PR08MB5365: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:901; X-Forefront-PRVS: 0367A50BB1 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(4636009)(396003)(346002)(136003)(39840400004)(366004)(376002)(52116002)(6506007)(5660300002)(2906002)(6916009)(2616005)(956004)(478600001)(16526019)(186003)(26005)(86362001)(66946007)(66556008)(66476007)(1076003)(6512007)(6486002)(107886003)(4326008)(6666004)(36756003)(8676002)(316002)(8936002)(81156014)(81166007); DIR:OUT; SFP:1102; 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: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: fadoDl+H3cEAKQhyqczt87zWfMdykea82fYhyP0pHqr8SE5OF5k3E6rWSk8SzQRGAm+oHJKu/i/Q5NnAksCytCfgg/1rxrPFV7JwbXOVtn0j1AmKSOdLxqGxNLXoEgBTNN/4H/ObDgGPLlPOZmx1c8J6oYUhDStmVFfg2gTsFwutO/8I+qJugdsph27TO9b2efC5c30mGmfnc6eWQ/tO3TUqs51aasuTQmTOvzBQHus0O2AfixvLpiBDJRN9OJa2agGwZyWNToGk5kTQFlnTxF7mgOLZFNqiMZ/KsqBldbr6bdZ0HkTMkUroOxyjaZXW60BvsakPlSckUfFkR/hCXVa+ijkyhx3cwJkBWJ09tL7D4GwGHKTbnAGCT9kfe//6755HgBA1DTNV0ng2l1GxVD22lw4c+rn0s242bx5i7vPXyDq18uL+QwX7jr4rf0Y6 X-MS-Exchange-AntiSpam-MessageData: h1kkIpSOKnDLoEVDnQPw4whJwybr7erMk1I/6tV+rbkP8/PFlpbYGO0MX0rqe8YAVo+LSmPXZchHWjUCztmkORTAkQTshPCZSYpN8bH0iR4AQvLMOww90y7amfymcyQZC6yX/DU3R6jY/rwripCs8w== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: a34666be-72f8-4f32-c73f-08d7db9f9176 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2020 09:31:08.4581 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VxTYnnky8e8e78DtcmbIvdcIuXLgqbnO8TqQYERraXWzPIMqnmvFjDZFodjUFdWaN0Z7ppYii9Fzaq1OUqk8M0Corp0wlK/Jfy2ypC3jhho= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5365 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a01:111:f400:fe1f::705 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: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Stefan Hajnoczi --- block/io.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/block/io.c b/block/io.c index a9f1a3e93e..29e53271b6 100644 --- a/block/io.c +++ b/block/io.c @@ -3126,31 +3126,38 @@ int bdrv_pdiscard(BdrvChild *child, int64_t offset,= int64_t bytes) =20 int bdrv_co_ioctl(BlockDriverState *bs, int req, void *buf) { + int ret; BlockDriver *drv =3D bs->drv; - CoroutineIOCompletion co =3D { - .coroutine =3D qemu_coroutine_self(), - }; - BlockAIOCB *acb; =20 bdrv_inc_in_flight(bs); + if (!drv || (!drv->bdrv_aio_ioctl && !drv->bdrv_co_ioctl)) { - co.ret =3D -ENOTSUP; + ret =3D -ENOTSUP; goto out; } =20 if (drv->bdrv_co_ioctl) { - co.ret =3D drv->bdrv_co_ioctl(bs, req, buf); + ret =3D drv->bdrv_co_ioctl(bs, req, buf); } else { + CoroutineIOCompletion co =3D { + .coroutine =3D qemu_coroutine_self(), + }; + BlockAIOCB *acb; + acb =3D drv->bdrv_aio_ioctl(bs, req, buf, bdrv_co_io_em_complete, = &co); if (!acb) { - co.ret =3D -ENOTSUP; + ret =3D -ENOTSUP; goto out; } + qemu_coroutine_yield(); + ret =3D co.ret; } + out: bdrv_dec_in_flight(bs); - return co.ret; + + return ret; } =20 void *qemu_blockalign(BlockDriverState *bs, size_t size) --=20 2.21.0 From nobody Sat May 18 23:44:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586338514951432.38214560958113; Wed, 8 Apr 2020 02:35:14 -0700 (PDT) Received: from localhost ([::1]:33252 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM773-0002Ak-N5 for importer@patchew.org; Wed, 08 Apr 2020 05:35:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39597) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM73L-0007rX-SO for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jM73J-00060d-Q8 for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:23 -0400 Received: from mail-ve1eur01on0705.outbound.protection.outlook.com ([2a01:111:f400:fe1f::705]:64128 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jM73B-0005tu-T1; Wed, 08 Apr 2020 05:31:14 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (10.141.175.15) by AM7PR08MB5365.eurprd08.prod.outlook.com (10.141.173.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Wed, 8 Apr 2020 09:31:09 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf%8]) with mapi id 15.20.2878.021; Wed, 8 Apr 2020 09:31:09 +0000 Received: from kvm.sw.ru (185.215.60.139) by AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Wed, 8 Apr 2020 09:31:08 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l/lGPPLzoeWjJ5P8W8agZ0JiNumSMYiNqZpCFbJuFRqkFAB3BEHx5zqs3SOoG7plKvj9wTN8Cc0LoKjsY4kguU54i8sUn/wDVEhp7TUSud79vLdJKgiD10XC4PCqoju8jDbOjOdEMAns08lNwQdXAYIdkU0lDb0ABd21SGkDvgGomyvADCkgf3OGNMEMJriD+b06dxoLjQbMvOJ7RUk+BBmgbiwfMhdn7noC30h039hV03MTgadgAy2UoYCLNQQtgEtVTvPI8AOL0IJ2gZ9QnExch+FPtN95qFcW0SjjJBE59ebJNpIBdCeCQyADFYsRu8dFnksj0SdVI/TgpY1ZmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lrAH8EEhLtVHUQRBFGNVfpBItKpUZosAMQDUUy1jX+c=; b=MwRTfJEa7WqYyqqjQdywQgEZwhlcv4coqQtcdoF1rIoznfDKfcfg7khVevkZbGBJsL4ZXpssG5AAWRBG2CroTSjEn701yNAQOw2/DCIEqYWR1Y9QV3j9ZLTc7rw+u9DIjzPLP4rYhvMfN7lWvtNZK0WkqB+RkvUSnj8geZjZejsihbw0gM0PNdqqi8hb7rT8hrWWKE99R+vBEC39Qd3vH8sYMboHwKmPARsZsKdTJaNRtSLTzS4oEOkW+GspA3/ukt2/t7+4QlIGrhYVeJbu7rEm0rSMXrQD68ZlBQHc0cM8rygMZqeNDXflFOmKy5q5KuETM3LxsmBjNWD5rtfEFw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lrAH8EEhLtVHUQRBFGNVfpBItKpUZosAMQDUUy1jX+c=; b=SKL9395ac+OG0A/MeuxHtvlWFpMc8iduXleD3Bnu3w/aHXL7ONQB4ayoNC/fOTZ+W7n1nEDm3dKWgoyFigDVgNN+bgIN7B2Ofgw2zR0APyFWbd2+RZf/RqhWb6hr8FQsg0gkt9KTT9ol68y0ObyZnBRWdtM9qzf66D3dFv47rew= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 3/9] block/io: move flush and pdiscard stuff down Date: Wed, 8 Apr 2020 12:30:45 +0300 Message-ID: <20200408093051.9893-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200408093051.9893-1-vsementsov@virtuozzo.com> References: <20200408093051.9893-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.139] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3cce24c8-2224-4130-05a7-08d7db9f91e9 X-MS-TrafficTypeDiagnostic: AM7PR08MB5365: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:248; X-Forefront-PRVS: 0367A50BB1 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(4636009)(396003)(346002)(136003)(39840400004)(366004)(376002)(52116002)(6506007)(5660300002)(2906002)(6916009)(2616005)(956004)(478600001)(16526019)(186003)(26005)(86362001)(66946007)(66556008)(66476007)(1076003)(6512007)(6486002)(107886003)(4326008)(6666004)(36756003)(8676002)(316002)(8936002)(81156014)(81166007); DIR:OUT; SFP:1102; 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: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WqgJfMEQ7HSMbe6Ua1jAosCl2mb3M9VMtWOsnsbpzwEC76wZy2edSZUWzZ1Vhc6BihPIux7fd4JNHodIrlHr+Cnh0ud3p/DL1UFDHHz+T92x3SH7p4xkzdNDmfhHz6blhT/hnXhksoWbvqdDbW/DxsUoHLKPx27iU1nz1cN4FOUnA40tgrj9HOx54eRMTB3/iLQ+NN4h1feDjgf326rA/bDF4qKwo7g8mly6YLyBX4yoaPVYVOHwsyW/oC7zr+b/R4DJlc1S0FkUIRN5d9m8yyocRe+Hp+19vScX1bjS+EmPaRx3z3qW4uGUWN2T2Et4uyDa1uNTJcOlYni7UsWuUlOlBq7UouAAyNhGIOyIH2fRCis00edLxEYR4g8o4pxXmFRiOT2bmzF7uikAaAjOtC5wg7rAPvnAlzWZeaGilhPuNyY+UjJgdVR5mU/+HTpM X-MS-Exchange-AntiSpam-MessageData: EHikI95LdSzDvcZtYxXkCh5VvgL+ptzf9dutaTf8C/su7uUbIweTQdvGuZ1iRHR89mKZwZyvt2doUnFzOrYGxAmTU+KCHDrYHAbORF/7vyJeYIwaKUDWKw9lOhePjI664OpFB5HQWi1FUb9sGEmVEg== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3cce24c8-2224-4130-05a7-08d7db9f91e9 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2020 09:31:09.1819 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: a457FYzwJ6wVHwZ5+yBdH0ULoJrUUmRPztS8oHTqEydFj2ha2AcdjJnov1eT362sCAD38VuAO6JISduBwSUZjS/fau4ztnCtJtQIaAbGf6w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5365 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a01:111:f400:fe1f::705 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: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" bdrv_co_flush and bdrv_co_pdiscard will become static in further patch, move their usage down. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Stefan Hajnoczi --- block/io.c | 56 +++++++++++++++++++++++++++--------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/block/io.c b/block/io.c index 29e53271b6..379e86eeb5 100644 --- a/block/io.c +++ b/block/io.c @@ -2828,20 +2828,6 @@ void bdrv_aio_cancel_async(BlockAIOCB *acb) /**************************************************************/ /* Coroutine block device emulation */ =20 -typedef struct FlushCo { - BlockDriverState *bs; - int ret; -} FlushCo; - - -static void coroutine_fn bdrv_flush_co_entry(void *opaque) -{ - FlushCo *rwco =3D opaque; - - rwco->ret =3D bdrv_co_flush(rwco->bs); - aio_wait_kick(); -} - int coroutine_fn bdrv_co_flush(BlockDriverState *bs) { int current_gen; @@ -2954,6 +2940,19 @@ early_exit: return ret; } =20 +typedef struct FlushCo { + BlockDriverState *bs; + int ret; +} FlushCo; + +static void coroutine_fn bdrv_flush_co_entry(void *opaque) +{ + FlushCo *rwco =3D opaque; + + rwco->ret =3D bdrv_co_flush(rwco->bs); + aio_wait_kick(); +} + int bdrv_flush(BlockDriverState *bs) { Coroutine *co; @@ -2974,20 +2973,6 @@ int bdrv_flush(BlockDriverState *bs) return flush_co.ret; } =20 -typedef struct DiscardCo { - BdrvChild *child; - int64_t offset; - int64_t bytes; - int ret; -} DiscardCo; -static void coroutine_fn bdrv_pdiscard_co_entry(void *opaque) -{ - DiscardCo *rwco =3D opaque; - - rwco->ret =3D bdrv_co_pdiscard(rwco->child, rwco->offset, rwco->bytes); - aio_wait_kick(); -} - int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, int64_t offset, int64_t bytes) { @@ -3102,6 +3087,21 @@ out: return ret; } =20 +typedef struct DiscardCo { + BdrvChild *child; + int64_t offset; + int64_t bytes; + int ret; +} DiscardCo; + +static void coroutine_fn bdrv_pdiscard_co_entry(void *opaque) +{ + DiscardCo *rwco =3D opaque; + + rwco->ret =3D bdrv_co_pdiscard(rwco->child, rwco->offset, rwco->bytes); + aio_wait_kick(); +} + int bdrv_pdiscard(BdrvChild *child, int64_t offset, int64_t bytes) { Coroutine *co; --=20 2.21.0 From nobody Sat May 18 23:44:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586338771259340.9690336727699; Wed, 8 Apr 2020 02:39:31 -0700 (PDT) Received: from localhost ([::1]:33332 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM7BB-0000Ov-RX for importer@patchew.org; Wed, 08 Apr 2020 05:39:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39641) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM73O-0007ub-43 for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jM73K-00060y-B4 for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:26 -0400 Received: from mail-ve1eur01on0705.outbound.protection.outlook.com ([2a01:111:f400:fe1f::705]:64128 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jM73C-0005tu-KT; Wed, 08 Apr 2020 05:31:14 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (10.141.175.15) by AM7PR08MB5365.eurprd08.prod.outlook.com (10.141.173.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Wed, 8 Apr 2020 09:31:10 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf%8]) with mapi id 15.20.2878.021; Wed, 8 Apr 2020 09:31:10 +0000 Received: from kvm.sw.ru (185.215.60.139) by AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Wed, 8 Apr 2020 09:31:09 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VaJxYwI/uY9YAuRM6/ZxBdw3hqlYA8kJqmuYxbbCUU2Ed5dnvx1Xy4Y+dva9ppApJ+NnN5J/wXFdzeTLKwcj51mluRKvQt/edD6Dq2J7gLoQ/VG09DSPuIrLwEgwWi0UChtgfZ5MnZFKmar6t4m8YipJAUXypeXP03g7RqMau8XTVlW/PxtMIQISpzIPXE0uBsxBcNPJBgEdZ2pSK1v1wUsXiKcKGsCk1VvQSRfns+RaqKDkZaB2YB30PFY8b+Ieizj1INJ25tYrzY/IQJiY2EGj+ODuU8htbmOl1DFrM4LZKotqASnDAQE/Rs2wFdjkDwjqYa9FTYSuB5r2zP9pGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1VJnpE2mGEmt4jgF3NuA9S0FsQu40HYxfAMv1qFVuGg=; b=agmIpBLdRSEqGT4LnubWURTHGq+Go/xNwhiaVRJ0oIqqC2GCDs166W2lD5hg/xdzj17k2J+VJl+d7J14mnVNxwDKdFJNHjKRyc1ffcJi+87ha7idiF6oubQrGBpzuI364NjSUWP1+HWzvz6K36RnMHoVniSxUIHcWOmEi4F5WzY2WkrMzpG1q3rBzvZmhXFJxZbU51HsGc9TKvQ1IbOTBY/ny1iYFWdh1QGp+AqLO+YsDrpAKnrWXBRhta4MmNNt3r56vfgA8XjKVT9y8S/QWx8Z8JPzCCfsgXya0LXkjCAv0ak2h5Rs6G/rddDAXGQrk5LjmHFX2w3DSa4BoRdiLA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1VJnpE2mGEmt4jgF3NuA9S0FsQu40HYxfAMv1qFVuGg=; b=hm6uot3dxIP1G2Ndz3b/mS9XNiqbejjHSlITOwRa+vCjESWQdtR83FhWf4r+IsygDcHQePbuAsUDWFilbfPxUY9Xw8spgbOOeH/8BfOBDlvAFdmKJAkJY2yFZfYiEXzdbW5TxYb/ZbKNSBeYcExcqU2JUCnU+vF/47LILP3r/xQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 4/9] block/io: move bdrv_rw_co_entry and friends down Date: Wed, 8 Apr 2020 12:30:46 +0300 Message-ID: <20200408093051.9893-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200408093051.9893-1-vsementsov@virtuozzo.com> References: <20200408093051.9893-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.139] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8d187f82-67ba-4471-40a1-08d7db9f9256 X-MS-TrafficTypeDiagnostic: AM7PR08MB5365: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-Forefront-PRVS: 0367A50BB1 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(4636009)(396003)(346002)(136003)(39840400004)(366004)(376002)(52116002)(6506007)(5660300002)(2906002)(6916009)(2616005)(956004)(478600001)(16526019)(186003)(26005)(86362001)(66946007)(66556008)(66476007)(1076003)(6512007)(6486002)(107886003)(4326008)(6666004)(36756003)(8676002)(316002)(8936002)(81156014)(81166007); DIR:OUT; SFP:1102; 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: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: szGXB4b+Bgz8FzMI2Np+RIMlLS3Ifesth9UM6Rdeuz01Z7eWrrCwMr5kUOZS7EszjKLxj3Ixxt/xgRFyjLg/aHnOcoPsVgpPxoMtZoJEmRYoWi/7TqBcVoIcnWghvGKuKv5bSxu2oGCi77Xco2/zIs+UVqkkik79OXVgGEfdD1UppC7FnOcIKdxrK2UV7cLmLgEcp6y9mNxFaD7GaNnjCSoF9ZplFewFa5aKV5O5aiFqwvd/n6sM8tWvqh5luysTu9Dg4m9OPx/u5Wy3PwCFQsF4M31AGz49W4L/5odFvOmQIPOccsRBZ+DrVl3lKAaRy3yudIl9SAolFEj2dmk05Olg51vJGiRte1ohS32PWG25UYZ6QLdR8PSO9xgg1Dfmd1NQJhdUIQekwj8jDyb63lwv2lYTnuZ3+C/zXtvnbsKH1JMf0wTyZfmaEl7lbe55 X-MS-Exchange-AntiSpam-MessageData: SpTk35Rrb2dYStfo985ZIunglyobTTkiTvpMbasQmDVkwP/Jijrgz31IVvnXXdAtgFNngji+EIXzP4g6ffEnpXuX0qC6J0DdTsLX/iIBmjnxf4eJtM+QR94rI0jp6zKkvTNqRYctUpjF+pYm/PTn4w== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8d187f82-67ba-4471-40a1-08d7db9f9256 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2020 09:31:09.9525 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: TBoX4afQkL/t8CVEyNz632udhyxHphnSXOwAWrxTJKFaWmOQNvl71n7HVXseJ18au0RDIAzZqQdGcxzSw0oGx/3IKhkr06Ok8myDOGohL+c= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5365 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a01:111:f400:fe1f::705 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: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" We are going to use bdrv_co_pwritev_part and bdrv_co_preadv_part in bdrv_rw_co_entry, so move it down. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Stefan Hajnoczi --- block/io.c | 361 +++++++++++++++++++++++++++-------------------------- 1 file changed, 181 insertions(+), 180 deletions(-) diff --git a/block/io.c b/block/io.c index 379e86eeb5..dfbe68f428 100644 --- a/block/io.c +++ b/block/io.c @@ -891,186 +891,6 @@ static int bdrv_check_byte_request(BlockDriverState *= bs, int64_t offset, return 0; } =20 -typedef struct RwCo { - BdrvChild *child; - int64_t offset; - QEMUIOVector *qiov; - bool is_write; - int ret; - BdrvRequestFlags flags; -} RwCo; - -static void coroutine_fn bdrv_rw_co_entry(void *opaque) -{ - RwCo *rwco =3D opaque; - - if (!rwco->is_write) { - rwco->ret =3D bdrv_co_preadv(rwco->child, rwco->offset, - rwco->qiov->size, rwco->qiov, - rwco->flags); - } else { - rwco->ret =3D bdrv_co_pwritev(rwco->child, rwco->offset, - rwco->qiov->size, rwco->qiov, - rwco->flags); - } - aio_wait_kick(); -} - -/* - * Process a vectored synchronous request using coroutines - */ -static int bdrv_prwv_co(BdrvChild *child, int64_t offset, - QEMUIOVector *qiov, bool is_write, - BdrvRequestFlags flags) -{ - Coroutine *co; - RwCo rwco =3D { - .child =3D child, - .offset =3D offset, - .qiov =3D qiov, - .is_write =3D is_write, - .ret =3D NOT_DONE, - .flags =3D flags, - }; - - if (qemu_in_coroutine()) { - /* Fast-path if already in coroutine context */ - bdrv_rw_co_entry(&rwco); - } else { - co =3D qemu_coroutine_create(bdrv_rw_co_entry, &rwco); - bdrv_coroutine_enter(child->bs, co); - BDRV_POLL_WHILE(child->bs, rwco.ret =3D=3D NOT_DONE); - } - return rwco.ret; -} - -int bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset, - int bytes, BdrvRequestFlags flags) -{ - QEMUIOVector qiov =3D QEMU_IOVEC_INIT_BUF(qiov, NULL, bytes); - - return bdrv_prwv_co(child, offset, &qiov, true, - BDRV_REQ_ZERO_WRITE | flags); -} - -/* - * Completely zero out a block device with the help of bdrv_pwrite_zeroes. - * The operation is sped up by checking the block status and only writing - * zeroes to the device if they currently do not return zeroes. Optional - * flags are passed through to bdrv_pwrite_zeroes (e.g. BDRV_REQ_MAY_UNMAP, - * BDRV_REQ_FUA). - * - * Returns < 0 on error, 0 on success. For error codes see bdrv_write(). - */ -int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags) -{ - int ret; - int64_t target_size, bytes, offset =3D 0; - BlockDriverState *bs =3D child->bs; - - target_size =3D bdrv_getlength(bs); - if (target_size < 0) { - return target_size; - } - - for (;;) { - bytes =3D MIN(target_size - offset, BDRV_REQUEST_MAX_BYTES); - if (bytes <=3D 0) { - return 0; - } - ret =3D bdrv_block_status(bs, offset, bytes, &bytes, NULL, NULL); - if (ret < 0) { - return ret; - } - if (ret & BDRV_BLOCK_ZERO) { - offset +=3D bytes; - continue; - } - ret =3D bdrv_pwrite_zeroes(child, offset, bytes, flags); - if (ret < 0) { - return ret; - } - offset +=3D bytes; - } -} - -int bdrv_preadv(BdrvChild *child, int64_t offset, QEMUIOVector *qiov) -{ - int ret; - - ret =3D bdrv_prwv_co(child, offset, qiov, false, 0); - if (ret < 0) { - return ret; - } - - return qiov->size; -} - -/* See bdrv_pwrite() for the return codes */ -int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int bytes) -{ - QEMUIOVector qiov =3D QEMU_IOVEC_INIT_BUF(qiov, buf, bytes); - - if (bytes < 0) { - return -EINVAL; - } - - return bdrv_preadv(child, offset, &qiov); -} - -int bdrv_pwritev(BdrvChild *child, int64_t offset, QEMUIOVector *qiov) -{ - int ret; - - ret =3D bdrv_prwv_co(child, offset, qiov, true, 0); - if (ret < 0) { - return ret; - } - - return qiov->size; -} - -/* Return no. of bytes on success or < 0 on error. Important errors are: - -EIO generic I/O error (may happen for all errors) - -ENOMEDIUM No media inserted. - -EINVAL Invalid offset or number of bytes - -EACCES Trying to write a read-only device -*/ -int bdrv_pwrite(BdrvChild *child, int64_t offset, const void *buf, int byt= es) -{ - QEMUIOVector qiov =3D QEMU_IOVEC_INIT_BUF(qiov, buf, bytes); - - if (bytes < 0) { - return -EINVAL; - } - - return bdrv_pwritev(child, offset, &qiov); -} - -/* - * Writes to the file and ensures that no writes are reordered across this - * request (acts as a barrier) - * - * Returns 0 on success, -errno in error cases. - */ -int bdrv_pwrite_sync(BdrvChild *child, int64_t offset, - const void *buf, int count) -{ - int ret; - - ret =3D bdrv_pwrite(child, offset, buf, count); - if (ret < 0) { - return ret; - } - - ret =3D bdrv_flush(child->bs); - if (ret < 0) { - return ret; - } - - return 0; -} - typedef struct CoroutineIOCompletion { Coroutine *coroutine; int ret; @@ -2185,6 +2005,187 @@ int coroutine_fn bdrv_co_pwrite_zeroes(BdrvChild *c= hild, int64_t offset, BDRV_REQ_ZERO_WRITE | flags); } =20 +typedef struct RwCo { + BdrvChild *child; + int64_t offset; + QEMUIOVector *qiov; + bool is_write; + int ret; + BdrvRequestFlags flags; +} RwCo; + +static void coroutine_fn bdrv_rw_co_entry(void *opaque) +{ + RwCo *rwco =3D opaque; + + if (!rwco->is_write) { + rwco->ret =3D bdrv_co_preadv(rwco->child, rwco->offset, + rwco->qiov->size, rwco->qiov, + rwco->flags); + } else { + rwco->ret =3D bdrv_co_pwritev(rwco->child, rwco->offset, + rwco->qiov->size, rwco->qiov, + rwco->flags); + } + aio_wait_kick(); +} + +/* + * Process a vectored synchronous request using coroutines + */ +static int bdrv_prwv_co(BdrvChild *child, int64_t offset, + QEMUIOVector *qiov, bool is_write, + BdrvRequestFlags flags) +{ + Coroutine *co; + RwCo rwco =3D { + .child =3D child, + .offset =3D offset, + .qiov =3D qiov, + .is_write =3D is_write, + .ret =3D NOT_DONE, + .flags =3D flags, + }; + + if (qemu_in_coroutine()) { + /* Fast-path if already in coroutine context */ + bdrv_rw_co_entry(&rwco); + } else { + co =3D qemu_coroutine_create(bdrv_rw_co_entry, &rwco); + bdrv_coroutine_enter(child->bs, co); + BDRV_POLL_WHILE(child->bs, rwco.ret =3D=3D NOT_DONE); + } + return rwco.ret; +} + +int bdrv_pwrite_zeroes(BdrvChild *child, int64_t offset, + int bytes, BdrvRequestFlags flags) +{ + QEMUIOVector qiov =3D QEMU_IOVEC_INIT_BUF(qiov, NULL, bytes); + + return bdrv_prwv_co(child, offset, &qiov, true, + BDRV_REQ_ZERO_WRITE | flags); +} + +/* See bdrv_pwrite() for the return codes */ +int bdrv_pread(BdrvChild *child, int64_t offset, void *buf, int bytes) +{ + QEMUIOVector qiov =3D QEMU_IOVEC_INIT_BUF(qiov, buf, bytes); + + if (bytes < 0) { + return -EINVAL; + } + + return bdrv_preadv(child, offset, &qiov); +} + +int bdrv_pwritev(BdrvChild *child, int64_t offset, QEMUIOVector *qiov) +{ + int ret; + + ret =3D bdrv_prwv_co(child, offset, qiov, true, 0); + if (ret < 0) { + return ret; + } + + return qiov->size; +} + +/* + * Return no. of bytes on success or < 0 on error. Important errors are: + * -EIO generic I/O error (may happen for all errors) + * -ENOMEDIUM No media inserted. + * -EINVAL Invalid offset or number of bytes + * -EACCES Trying to write a read-only device + */ +int bdrv_pwrite(BdrvChild *child, int64_t offset, const void *buf, int byt= es) +{ + QEMUIOVector qiov =3D QEMU_IOVEC_INIT_BUF(qiov, buf, bytes); + + if (bytes < 0) { + return -EINVAL; + } + + return bdrv_pwritev(child, offset, &qiov); +} + +/* + * Writes to the file and ensures that no writes are reordered across this + * request (acts as a barrier) + * + * Returns 0 on success, -errno in error cases. + */ +int bdrv_pwrite_sync(BdrvChild *child, int64_t offset, + const void *buf, int count) +{ + int ret; + + ret =3D bdrv_pwrite(child, offset, buf, count); + if (ret < 0) { + return ret; + } + + ret =3D bdrv_flush(child->bs); + if (ret < 0) { + return ret; + } + + return 0; +} + +/* + * Completely zero out a block device with the help of bdrv_pwrite_zeroes. + * The operation is sped up by checking the block status and only writing + * zeroes to the device if they currently do not return zeroes. Optional + * flags are passed through to bdrv_pwrite_zeroes (e.g. BDRV_REQ_MAY_UNMAP, + * BDRV_REQ_FUA). + * + * Returns < 0 on error, 0 on success. For error codes see bdrv_write(). + */ +int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags) +{ + int ret; + int64_t target_size, bytes, offset =3D 0; + BlockDriverState *bs =3D child->bs; + + target_size =3D bdrv_getlength(bs); + if (target_size < 0) { + return target_size; + } + + for (;;) { + bytes =3D MIN(target_size - offset, BDRV_REQUEST_MAX_BYTES); + if (bytes <=3D 0) { + return 0; + } + ret =3D bdrv_block_status(bs, offset, bytes, &bytes, NULL, NULL); + if (ret < 0) { + return ret; + } + if (ret & BDRV_BLOCK_ZERO) { + offset +=3D bytes; + continue; + } + ret =3D bdrv_pwrite_zeroes(child, offset, bytes, flags); + if (ret < 0) { + return ret; + } + offset +=3D bytes; + } +} + +int bdrv_preadv(BdrvChild *child, int64_t offset, QEMUIOVector *qiov) +{ + int ret; + + ret =3D bdrv_prwv_co(child, offset, qiov, false, 0); + if (ret < 0) { + return ret; + } + + return qiov->size; +} + /* * Flush ALL BDSes regardless of if they are reachable via a BlkBackend or= not. */ --=20 2.21.0 From nobody Sat May 18 23:44:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586338852608245.9127977652647; Wed, 8 Apr 2020 02:40:52 -0700 (PDT) Received: from localhost ([::1]:33372 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM7CV-0002R8-CI for importer@patchew.org; Wed, 08 Apr 2020 05:40:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39659) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM73Q-0007x2-Cj for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jM73O-00063n-Ed for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:28 -0400 Received: from mail-ve1eur01on0705.outbound.protection.outlook.com ([2a01:111:f400:fe1f::705]:64128 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jM73D-0005tu-40; Wed, 08 Apr 2020 05:31:15 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (10.141.175.15) by AM7PR08MB5365.eurprd08.prod.outlook.com (10.141.173.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Wed, 8 Apr 2020 09:31:10 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf%8]) with mapi id 15.20.2878.021; Wed, 8 Apr 2020 09:31:10 +0000 Received: from kvm.sw.ru (185.215.60.139) by AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Wed, 8 Apr 2020 09:31:10 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ld7aSy3Ir/irOgG7HJwHVno76mBvKtWM+v3thmuuBV112rmt5YmTDVTBO+Z8pVadou1v8zZrMIOF29BtAvymWQSh7U/MMCMFnAMK1fZNSBM2jCvHFgaS3jivn0oCwV8TIlz/4TOgIBo4/QPdDyNX+TUJrHsP0QKj7zwx1NVsmsi3dRfIJiSYYulKO/IaEg+Pp8v5ByWPnKQAPWa0owg0fbhzttVxOY/mwAXx/MzqcMPpYUXGtY0wAq5tmJG4FTrYx0Uv8NmvR3byYOyerVp2YTwRvOvwnIawxrTCk/uftfBdihGDxJiiU2L3vhRbjBdmDOyOVH1blg7/7TpRtSGC7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=87vgTIBvLlPypl3q1WI4LHsEyMyb+g1xZpy6wBDLnHA=; b=Dw8720slMQD8MxJj0A1ujwL8wVuE5doySZgmpZpXudnQDzVqvEXRU488d07GCtHPzbfZJoPsii3mv6TGHB5rxlopAw0gfgsfNAW5GaNG70q4LPHQvKaXXDQ2Qgk3RZMg0v2/lhVP8b+ZydNC+fXP/WypOIm8FmQIP3/tIfzpIaOsEnn3+BIizgHB3nwujHhIhT6c0OsILxKEQtFVuIPARkG7SLK94XLUn1REyeENrl6G7UTD8ELJDeGc6eYRxhnEmGNUEkxjhKpXYPAnt5y8BFASNulrB/yxlE2hTMtVSMYUc7bVwATQgFdm4rRss5X0p3qofkgKbe+tjH6eAsPZCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=87vgTIBvLlPypl3q1WI4LHsEyMyb+g1xZpy6wBDLnHA=; b=MRI02oN76c0sQCFQsATAk7lKQULVCDZXlQoIPHKhQwKUNdapJ2JSSMVKn6Rv8YVx7iYrUC5MS4qIw6pwTxkCwGT+EBiGRD2suTyuQhm7W14OJNbhfyny5XrgOU5WCDdrPPvKrSles7M26uXXN2h1Zmtcif4QvFXQkzJiEmW259k= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 5/9] block/io: expand in_flight inc/dec section: simple cases Date: Wed, 8 Apr 2020 12:30:47 +0300 Message-ID: <20200408093051.9893-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200408093051.9893-1-vsementsov@virtuozzo.com> References: <20200408093051.9893-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.139] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5da3fb8d-e2fa-4fa1-1dfb-08d7db9f92ce X-MS-TrafficTypeDiagnostic: AM7PR08MB5365: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5516; X-Forefront-PRVS: 0367A50BB1 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(4636009)(396003)(346002)(136003)(39840400004)(366004)(376002)(52116002)(6506007)(5660300002)(2906002)(6916009)(2616005)(956004)(478600001)(16526019)(186003)(26005)(86362001)(66946007)(66556008)(66476007)(1076003)(6512007)(6486002)(107886003)(30864003)(4326008)(6666004)(36756003)(8676002)(316002)(8936002)(81156014)(81166007); DIR:OUT; SFP:1102; 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: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: GhP91Yely4Sl2uV+WHuoCVUFJfMud20Qupt1vI4mYNiJS39CctmnhVrWvGlxI8FBO+kO5/XCeNuBFE4fSw45+fJp2vpaFNXBtNAENrnW22ilHsTYqs50KAgO3eINqIoO3RcJQJILTBToKQS7SlY1DTcrkozqR/dNEILWwGrj3jy5sjAk01PtcbF1GUTuU2eYep4TlXuI++j37hmWE7BenIyMY6obbBhpy59EYZCruDlcIkXNC7tkOeu150Aa4XYVhlPYLAhGjFA90qg6/kvHajlGbAgbjZxy36Pi7/GkjmPT91oedslylJgifFvCTHxvPNmP97RnXipfmaqDRnKGJa/tGw2kk6DhwEcs3L3uNT7RtSfW6GIeQihmiypSb9AjVAXCyh89RFVviTBCwiRBuDhwXjGgMKJQSNxBnJkH433Kg5CFXz7tTOsEdjU4vZAx X-MS-Exchange-AntiSpam-MessageData: PZ88VNTa6nzdufFOKvPWwmYQEJUcZ7wLuyOVJLgchm5NeFnm7pyezyvnyg2myUzYM2VCCRehmze2qtTROef/JHOiVzs8GSdsfR+AR3gc0PZ75B/6cetTahJIuk6dFFXoNjfngH+ANFyAzi2KjS7cQg== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5da3fb8d-e2fa-4fa1-1dfb-08d7db9f92ce X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2020 09:31:10.7281 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: anjz09E3Uz5OmbEnCcEIbNuo7cAh713MGtK9f42HHMXT+Mzw6tpxfwRhhmIk/NHVxO5Q1ahepDup6NLhwa1BkYMniTCCujuWfcGbTic2oF0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5365 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a01:111:f400:fe1f::705 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: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" It's safer to expand in_flight request to start before enter to coroutine in synchronous wrappers and end after BDRV_POLL_WHILE loop. Note that qemu_coroutine_enter may only schedule the coroutine in some circumstances. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/io.c | 155 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 119 insertions(+), 36 deletions(-) diff --git a/block/io.c b/block/io.c index dfbe68f428..9b57c7e422 100644 --- a/block/io.c +++ b/block/io.c @@ -1511,7 +1511,8 @@ int coroutine_fn bdrv_co_preadv(BdrvChild *child, return bdrv_co_preadv_part(child, offset, bytes, qiov, 0, flags); } =20 -int coroutine_fn bdrv_co_preadv_part(BdrvChild *child, +/* To be called between exactly one pair of bdrv_inc/dec_in_flight() */ +static int coroutine_fn bdrv_do_preadv_part(BdrvChild *child, int64_t offset, unsigned int bytes, QEMUIOVector *qiov, size_t qiov_offset, BdrvRequestFlags flags) @@ -1540,8 +1541,6 @@ int coroutine_fn bdrv_co_preadv_part(BdrvChild *child, return 0; } =20 - bdrv_inc_in_flight(bs); - /* Don't do copy-on-read if we read data before write operation */ if (atomic_read(&bs->copy_on_read)) { flags |=3D BDRV_REQ_COPY_ON_READ; @@ -1554,13 +1553,26 @@ int coroutine_fn bdrv_co_preadv_part(BdrvChild *chi= ld, bs->bl.request_alignment, qiov, qiov_offset, flags); tracked_request_end(&req); - bdrv_dec_in_flight(bs); =20 bdrv_padding_destroy(&pad); =20 return ret; } =20 +int coroutine_fn bdrv_co_preadv_part(BdrvChild *child, + int64_t offset, unsigned int bytes, + QEMUIOVector *qiov, size_t qiov_offset, + BdrvRequestFlags flags) +{ + int ret; + + bdrv_inc_in_flight(child->bs); + ret =3D bdrv_do_preadv_part(child, offset, bytes, qiov, qiov_offset, f= lags); + bdrv_dec_in_flight(child->bs); + + return ret; +} + static int coroutine_fn bdrv_co_do_pwrite_zeroes(BlockDriverState *bs, int64_t offset, int bytes, BdrvRequestFlags flags) { @@ -1922,7 +1934,8 @@ int coroutine_fn bdrv_co_pwritev(BdrvChild *child, return bdrv_co_pwritev_part(child, offset, bytes, qiov, 0, flags); } =20 -int coroutine_fn bdrv_co_pwritev_part(BdrvChild *child, +/* To be called between exactly one pair of bdrv_inc/dec_in_flight() */ +static int coroutine_fn bdrv_do_pwritev_part(BdrvChild *child, int64_t offset, unsigned int bytes, QEMUIOVector *qiov, size_t qiov_of= fset, BdrvRequestFlags flags) { @@ -1962,7 +1975,6 @@ int coroutine_fn bdrv_co_pwritev_part(BdrvChild *chil= d, return 0; } =20 - bdrv_inc_in_flight(bs); /* * Align write if necessary by performing a read-modify-write cycle. * Pad qiov with the read parts and be sure to have a tracked request = not @@ -1987,7 +1999,19 @@ int coroutine_fn bdrv_co_pwritev_part(BdrvChild *chi= ld, =20 out: tracked_request_end(&req); - bdrv_dec_in_flight(bs); + + return ret; +} + +int coroutine_fn bdrv_co_pwritev_part(BdrvChild *child, + int64_t offset, unsigned int bytes, QEMUIOVector *qiov, size_t qiov_of= fset, + BdrvRequestFlags flags) +{ + int ret; + + bdrv_inc_in_flight(child->bs); + ret =3D bdrv_do_pwritev_part(child, offset, bytes, qiov, qiov_offset, = flags); + bdrv_dec_in_flight(child->bs); =20 return ret; } @@ -2019,12 +2043,12 @@ static void coroutine_fn bdrv_rw_co_entry(void *opa= que) RwCo *rwco =3D opaque; =20 if (!rwco->is_write) { - rwco->ret =3D bdrv_co_preadv(rwco->child, rwco->offset, - rwco->qiov->size, rwco->qiov, + rwco->ret =3D bdrv_do_preadv_part(rwco->child, rwco->offset, + rwco->qiov->size, rwco->qiov, 0, rwco->flags); } else { - rwco->ret =3D bdrv_co_pwritev(rwco->child, rwco->offset, - rwco->qiov->size, rwco->qiov, + rwco->ret =3D bdrv_do_pwritev_part(rwco->child, rwco->offset, + rwco->qiov->size, rwco->qiov, 0, rwco->flags); } aio_wait_kick(); @@ -2047,6 +2071,8 @@ static int bdrv_prwv_co(BdrvChild *child, int64_t off= set, .flags =3D flags, }; =20 + bdrv_inc_in_flight(child->bs); + if (qemu_in_coroutine()) { /* Fast-path if already in coroutine context */ bdrv_rw_co_entry(&rwco); @@ -2055,6 +2081,9 @@ static int bdrv_prwv_co(BdrvChild *child, int64_t off= set, bdrv_coroutine_enter(child->bs, co); BDRV_POLL_WHILE(child->bs, rwco.ret =3D=3D NOT_DONE); } + + bdrv_dec_in_flight(child->bs); + return rwco.ret; } =20 @@ -2700,15 +2729,14 @@ typedef struct BdrvVmstateCo { int ret; } BdrvVmstateCo; =20 +/* To be called between exactly one pair of bdrv_inc/dec_in_flight() */ static int coroutine_fn -bdrv_co_rw_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos, +bdrv_do_rw_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos, bool is_read) { BlockDriver *drv =3D bs->drv; int ret =3D -ENOTSUP; =20 - bdrv_inc_in_flight(bs); - if (!drv) { ret =3D -ENOMEDIUM; } else if (drv->bdrv_load_vmstate) { @@ -2718,17 +2746,18 @@ bdrv_co_rw_vmstate(BlockDriverState *bs, QEMUIOVect= or *qiov, int64_t pos, ret =3D drv->bdrv_save_vmstate(bs, qiov, pos); } } else if (bs->file) { - ret =3D bdrv_co_rw_vmstate(bs->file->bs, qiov, pos, is_read); + bdrv_inc_in_flight(bs->file->bs); + ret =3D bdrv_do_rw_vmstate(bs->file->bs, qiov, pos, is_read); + bdrv_dec_in_flight(bs->file->bs); } =20 - bdrv_dec_in_flight(bs); return ret; } =20 static void coroutine_fn bdrv_co_rw_vmstate_entry(void *opaque) { BdrvVmstateCo *co =3D opaque; - co->ret =3D bdrv_co_rw_vmstate(co->bs, co->qiov, co->pos, co->is_read); + co->ret =3D bdrv_do_rw_vmstate(co->bs, co->qiov, co->pos, co->is_read); aio_wait_kick(); } =20 @@ -2736,8 +2765,12 @@ static inline int bdrv_rw_vmstate(BlockDriverState *bs, QEMUIOVector *qiov, int64_t pos, bool is_read) { + int ret; + + bdrv_inc_in_flight(bs); + if (qemu_in_coroutine()) { - return bdrv_co_rw_vmstate(bs, qiov, pos, is_read); + ret =3D bdrv_do_rw_vmstate(bs, qiov, pos, is_read); } else { BdrvVmstateCo data =3D { .bs =3D bs, @@ -2750,8 +2783,12 @@ bdrv_rw_vmstate(BlockDriverState *bs, QEMUIOVector *= qiov, int64_t pos, =20 bdrv_coroutine_enter(bs, co); BDRV_POLL_WHILE(bs, data.ret =3D=3D -EINPROGRESS); - return data.ret; + ret =3D data.ret; } + + bdrv_dec_in_flight(bs); + + return ret; } =20 int bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf, @@ -2829,16 +2866,14 @@ void bdrv_aio_cancel_async(BlockAIOCB *acb) /**************************************************************/ /* Coroutine block device emulation */ =20 -int coroutine_fn bdrv_co_flush(BlockDriverState *bs) +/* To be called between exactly one pair of bdrv_inc/dec_in_flight() */ +static int coroutine_fn bdrv_do_flush(BlockDriverState *bs) { int current_gen; - int ret =3D 0; - - bdrv_inc_in_flight(bs); + int ret; =20 - if (!bdrv_is_inserted(bs) || bdrv_is_read_only(bs) || - bdrv_is_sg(bs)) { - goto early_exit; + if (!bdrv_is_inserted(bs) || bdrv_is_read_only(bs) || bdrv_is_sg(bs)) { + return 0; } =20 qemu_co_mutex_lock(&bs->reqs_lock); @@ -2936,8 +2971,17 @@ out: qemu_co_queue_next(&bs->flush_queue); qemu_co_mutex_unlock(&bs->reqs_lock); =20 -early_exit: + return ret; +} + +int coroutine_fn bdrv_co_flush(BlockDriverState *bs) +{ + int ret; + + bdrv_inc_in_flight(bs); + ret =3D bdrv_do_flush(bs); bdrv_dec_in_flight(bs); + return ret; } =20 @@ -2950,7 +2994,7 @@ static void coroutine_fn bdrv_flush_co_entry(void *op= aque) { FlushCo *rwco =3D opaque; =20 - rwco->ret =3D bdrv_co_flush(rwco->bs); + rwco->ret =3D bdrv_do_flush(rwco->bs); aio_wait_kick(); } =20 @@ -2962,6 +3006,8 @@ int bdrv_flush(BlockDriverState *bs) .ret =3D NOT_DONE, }; =20 + bdrv_inc_in_flight(bs); + if (qemu_in_coroutine()) { /* Fast-path if already in coroutine context */ bdrv_flush_co_entry(&flush_co); @@ -2971,11 +3017,14 @@ int bdrv_flush(BlockDriverState *bs) BDRV_POLL_WHILE(bs, flush_co.ret =3D=3D NOT_DONE); } =20 + bdrv_dec_in_flight(bs); + return flush_co.ret; } =20 -int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, int64_t offset, - int64_t bytes) +/* To be called between exactly one pair of bdrv_inc/dec_in_flight() */ +static int coroutine_fn bdrv_do_pdiscahd(BdrvChild *child, int64_t offset, + int64_t bytes) { BdrvTrackedRequest req; int max_pdiscard, ret; @@ -3013,7 +3062,6 @@ int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, i= nt64_t offset, head =3D offset % align; tail =3D (offset + bytes) % align; =20 - bdrv_inc_in_flight(bs); tracked_request_begin(&req, bs, offset, bytes, BDRV_TRACKED_DISCARD); =20 ret =3D bdrv_co_write_req_prepare(child, offset, bytes, &req, 0); @@ -3084,7 +3132,19 @@ int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, = int64_t offset, out: bdrv_co_write_req_finish(child, req.offset, req.bytes, &req, ret); tracked_request_end(&req); - bdrv_dec_in_flight(bs); + return ret; +} + +int coroutine_fn bdrv_co_pdiscard(BdrvChild *child, + int64_t offset, int64_t bytes) +{ + int ret; + BlockDriverState *bs =3D child->bs; + + bdrv_inc_in_flight(child->bs); + ret =3D bdrv_do_pdiscahd(child, offset, bytes); + bdrv_dec_in_flight(child->bs); + return ret; } =20 @@ -3113,6 +3173,8 @@ int bdrv_pdiscard(BdrvChild *child, int64_t offset, i= nt64_t bytes) .ret =3D NOT_DONE, }; =20 + bdrv_inc_in_flight(child->bs); + if (qemu_in_coroutine()) { /* Fast-path if already in coroutine context */ bdrv_pdiscard_co_entry(&rwco); @@ -3122,6 +3184,8 @@ int bdrv_pdiscard(BdrvChild *child, int64_t offset, i= nt64_t bytes) BDRV_POLL_WHILE(child->bs, rwco.ret =3D=3D NOT_DONE); } =20 + bdrv_dec_in_flight(child->bs); + return rwco.ret; } =20 @@ -3412,9 +3476,12 @@ static void bdrv_parent_cb_resize(BlockDriverState *= bs) * If 'exact' is true, the file must be resized to exactly the given * 'offset'. Otherwise, it is sufficient for the node to be at least * 'offset' bytes in length. + * + * To be called between exactly one pair of bdrv_inc/dec_in_flight() */ -int coroutine_fn bdrv_co_truncate(BdrvChild *child, int64_t offset, bool e= xact, - PreallocMode prealloc, Error **errp) +static int coroutine_fn bdrv_do_truncate(BdrvChild *child, + int64_t offset, bool exact, + PreallocMode prealloc, Error **er= rp) { BlockDriverState *bs =3D child->bs; BlockDriver *drv =3D bs->drv; @@ -3445,7 +3512,6 @@ int coroutine_fn bdrv_co_truncate(BdrvChild *child, i= nt64_t offset, bool exact, new_bytes =3D 0; } =20 - bdrv_inc_in_flight(bs); tracked_request_begin(&req, bs, offset - new_bytes, new_bytes, BDRV_TRACKED_TRUNCATE); =20 @@ -3494,6 +3560,19 @@ int coroutine_fn bdrv_co_truncate(BdrvChild *child, = int64_t offset, bool exact, =20 out: tracked_request_end(&req); + + return ret; +} + +int coroutine_fn bdrv_co_truncate(BdrvChild *child, + int64_t offset, bool exact, + PreallocMode prealloc, Error **errp) +{ + int ret; + BlockDriverState *bs =3D child->bs; + + bdrv_inc_in_flight(bs); + ret =3D bdrv_do_truncate(child, offset, exact, prealloc, errp); bdrv_dec_in_flight(bs); =20 return ret; @@ -3511,7 +3590,7 @@ typedef struct TruncateCo { static void coroutine_fn bdrv_truncate_co_entry(void *opaque) { TruncateCo *tco =3D opaque; - tco->ret =3D bdrv_co_truncate(tco->child, tco->offset, tco->exact, + tco->ret =3D bdrv_do_truncate(tco->child, tco->offset, tco->exact, tco->prealloc, tco->errp); aio_wait_kick(); } @@ -3529,6 +3608,8 @@ int bdrv_truncate(BdrvChild *child, int64_t offset, b= ool exact, .ret =3D NOT_DONE, }; =20 + bdrv_inc_in_flight(child->bs); + if (qemu_in_coroutine()) { /* Fast-path if already in coroutine context */ bdrv_truncate_co_entry(&tco); @@ -3538,5 +3619,7 @@ int bdrv_truncate(BdrvChild *child, int64_t offset, b= ool exact, BDRV_POLL_WHILE(child->bs, tco.ret =3D=3D NOT_DONE); } =20 + bdrv_dec_in_flight(child->bs); + return tco.ret; } --=20 2.21.0 From nobody Sat May 18 23:44:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586338681265768.2677411138266; Wed, 8 Apr 2020 02:38:01 -0700 (PDT) Received: from localhost ([::1]:33304 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM79i-0006Ah-VJ for importer@patchew.org; Wed, 08 Apr 2020 05:37:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39562) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM73K-0007ov-Du for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jM73I-0005zj-RA for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:22 -0400 Received: from mail-ve1eur01on0705.outbound.protection.outlook.com ([2a01:111:f400:fe1f::705]:64128 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jM73E-0005tu-O5; Wed, 08 Apr 2020 05:31:17 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (10.141.175.15) by AM7PR08MB5365.eurprd08.prod.outlook.com (10.141.173.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Wed, 8 Apr 2020 09:31:11 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf%8]) with mapi id 15.20.2878.021; Wed, 8 Apr 2020 09:31:11 +0000 Received: from kvm.sw.ru (185.215.60.139) by AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Wed, 8 Apr 2020 09:31:10 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=R6zyWLh2wbjjB7m+gwS5BoukskwX3/6dc0aSzmBeAmAcOUrPj78QsoDD/Q5ZdPkJ8ATJzMcyu7K+020smMFxQdWHCvfYbk9BF0R9OMGhOZYVdxA3ayFUDUI3QS4nNHl5he1UgVYFXoRtLmV9SK/0lzFpRYFY2bPFx8y190w6J9Cv2F/IOM4d6ebM2Ip/GYKMZSrWjbORS+dsd4rEi/tCZg/u0suROB37Q+gbp3bege77aK3WmKoMgb1LFZEhZT63AM3Quf4zZfs921Hw7vGrT8YU6G8T52lpaZCB23/DskbCDT2ryI3/03+Py9nx8ixDaNUcw+JCkRctSvdnf2e6gg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=n1H6pHZ5MlNjEidQ6XK14YXzURJC3WSagDRIKLy4f38=; b=deM97R+ewQP38IZv8tv9Vn/gyU9/k7WtcwtNK1rwRx5HCzSvoxyFrZj1nTYeaf5CIcNUFNN7/OGUPUtcbiHdxTC2pJfg32RVVz5zLGZuoI6rucfdbcZpttMaA7lxFFqjK3sNvPMu4Gr0ULJ2Uuk1s4lsQN0SU2HRofp9gMoOvqjgC8zwJhUraTG+3/rAthLmkdBcje3dlWKJpbDmbW4MfK/sIFdhqBbvlnT1iOBiu5KKR24wR+PuX0sFFFUeX9CfQfJ/5W1mFRetcH0ytG/rCX1mns7rQ2ufIYBS8q7wTt75+QhCAaW6zl5Bf15IJVHxj1b7Disa147KwAsjprxZUA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=n1H6pHZ5MlNjEidQ6XK14YXzURJC3WSagDRIKLy4f38=; b=mAcfMQJzo0iu92k25nbL1R1Hap3lIkJI7Pk14Yi8R7unrYbTAwMOHlERIglmtRLCE3TAt6F1uE7XTdJOoP5Wqat0GMgU2OHfvQGSbS1duAIOLThhzguA8wPzitS50wfa025kmF02tTBOb0uyfKdBB8cl4m/kM9289sdDUkKt62o= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 6/9] block/io: expand in_flight inc/dec section: block-status Date: Wed, 8 Apr 2020 12:30:48 +0300 Message-ID: <20200408093051.9893-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200408093051.9893-1-vsementsov@virtuozzo.com> References: <20200408093051.9893-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.139] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f7731202-1c94-40e9-ba61-08d7db9f9341 X-MS-TrafficTypeDiagnostic: AM7PR08MB5365: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-Forefront-PRVS: 0367A50BB1 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(4636009)(396003)(346002)(136003)(39840400004)(366004)(376002)(52116002)(6506007)(5660300002)(2906002)(6916009)(2616005)(956004)(478600001)(16526019)(186003)(26005)(86362001)(66946007)(66556008)(66476007)(1076003)(6512007)(6486002)(107886003)(4326008)(6666004)(36756003)(8676002)(316002)(8936002)(81156014)(81166007); DIR:OUT; SFP:1102; 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: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 7IesvwQC6KydwE7aGvo9UL501ILrZeGfLgVKYqBQGRcsqH2bLeavoaEDDPCLZcvQ5MUBFObfplbw0fnFolsqzPuSUXEWpd1J176xTPUItvokKSENjDCqQKAkDKYpfpXxumwOJWJNk70ljKw+pBhXzMO8l6p0ljfiZe1mUAmDhuxyjHNegctLR1rlxbu7jZWuiHiI3ivVCi6LXmzZt+bknn66VQ/nwdhl0ymouCzH8Yxr50EPLZTm9/wIDDHsOUSbMey2mzxSfs8WxW08oY++bJTSylspJxKaQZOfM26ogHCov/pMMZ8sj1NLsoPPBzSU015voZFb5IjV8De8TuBRIuuu/l9uTi6gSRd8lPYuGAqlcTWUAsUbVG9ze0KtNNjwj+VH+L97ILDL5a3R2XUMqE//MlwvAw1yZt1oQZ63/x7YfFpoyMA9vgw6+bNFdu2O X-MS-Exchange-AntiSpam-MessageData: NU4Iht1w80Lc5h3ffaBPpSNOG/RcIpmkyLYKj53+Dh20X0VMGlHOBq3aUKhDOjjuVzY4bts2yLWBZEz9qdN31Ll8gWGC0NlBJo/SdSOru41nRfX+oywPea13TRGWTaFn2lOgnJqmiaZcRWD0pSENzg== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f7731202-1c94-40e9-ba61-08d7db9f9341 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2020 09:31:11.4897 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: L+h2AKPcFab9+m+v2fqpiMDynQkooKaVhTyMVjHtcsb1zn8+mEldg8oB3mw5+ZpMC6QicFxUw1t0jekeY5DhI3L6HkQPM0umm8/yOGghsZo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5365 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a01:111:f400:fe1f::705 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: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" It's safer to expand in_flight request to start before enter to coroutine in synchronous wrappers and end after BDRV_POLL_WHILE loop. Note that qemu_coroutine_enter may only schedule the coroutine in some circumstances. block-status requests are complex, they involve querying different block driver states across backing chain. Let's expand only in_flight section for the top bs, keeping other sections as is. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Stefan Hajnoczi --- block/io.c | 60 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/block/io.c b/block/io.c index 9b57c7e422..760170731f 100644 --- a/block/io.c +++ b/block/io.c @@ -2302,6 +2302,10 @@ int coroutine_fn bdrv_co_block_status_from_backing(B= lockDriverState *bs, * _ZERO where possible; otherwise, the result favors larger 'pnum', * with a focus on accurate BDRV_BLOCK_ALLOCATED. * + * If 'inc_in_flight' is true, in_flight counter will be increased for bs = during + * the operation. All nested block_status calls will increase the counter = for + * corresponding bs anyway. + * * If 'offset' is beyond the end of the disk image the return value is * BDRV_BLOCK_EOF and 'pnum' is set to 0. * @@ -2320,7 +2324,7 @@ int coroutine_fn bdrv_co_block_status_from_backing(Bl= ockDriverState *bs, * set to the host mapping and BDS corresponding to the guest offset. */ static int coroutine_fn bdrv_co_block_status(BlockDriverState *bs, - bool want_zero, + bool want_zero, bool inc_in_f= light, int64_t offset, int64_t bytes, int64_t *pnum, int64_t *map, BlockDriverState **file) @@ -2371,7 +2375,9 @@ static int coroutine_fn bdrv_co_block_status(BlockDri= verState *bs, goto early_out; } =20 - bdrv_inc_in_flight(bs); + if (inc_in_flight) { + bdrv_inc_in_flight(bs); + } =20 /* Round out to request_alignment boundaries */ align =3D bs->bl.request_alignment; @@ -2408,7 +2414,7 @@ static int coroutine_fn bdrv_co_block_status(BlockDri= verState *bs, =20 if (ret & BDRV_BLOCK_RAW) { assert(ret & BDRV_BLOCK_OFFSET_VALID && local_file); - ret =3D bdrv_co_block_status(local_file, want_zero, local_map, + ret =3D bdrv_co_block_status(local_file, want_zero, true, local_ma= p, *pnum, pnum, &local_map, &local_file); goto out; } @@ -2435,7 +2441,7 @@ static int coroutine_fn bdrv_co_block_status(BlockDri= verState *bs, int64_t file_pnum; int ret2; =20 - ret2 =3D bdrv_co_block_status(local_file, want_zero, local_map, + ret2 =3D bdrv_co_block_status(local_file, want_zero, true, local_m= ap, *pnum, &file_pnum, NULL, NULL); if (ret2 >=3D 0) { /* Ignore errors. This is just providing extra information, it @@ -2458,7 +2464,9 @@ static int coroutine_fn bdrv_co_block_status(BlockDri= verState *bs, } =20 out: - bdrv_dec_in_flight(bs); + if (inc_in_flight) { + bdrv_dec_in_flight(bs); + } if (ret >=3D 0 && offset + *pnum =3D=3D total_size) { ret |=3D BDRV_BLOCK_EOF; } @@ -2472,9 +2480,15 @@ early_out: return ret; } =20 +/* + * If 'inc_in_flight' is true, in_flight counter will be increased for bs = during + * the operation. All block_status calls to the backing chain of bs will + * increase the counter for corresponding bs anyway. + */ static int coroutine_fn bdrv_co_block_status_above(BlockDriverState *bs, BlockDriverState *base, bool want_zero, + bool inc_in_flight, int64_t offset, int64_t bytes, int64_t *pnum, @@ -2487,11 +2501,13 @@ static int coroutine_fn bdrv_co_block_status_above(= BlockDriverState *bs, =20 assert(bs !=3D base); for (p =3D bs; p !=3D base; p =3D backing_bs(p)) { - ret =3D bdrv_co_block_status(p, want_zero, offset, bytes, pnum, ma= p, - file); + ret =3D bdrv_co_block_status(p, want_zero, inc_in_flight, + offset, bytes, pnum, map, file); if (ret < 0) { break; } + inc_in_flight =3D true; + if (ret & BDRV_BLOCK_ZERO && ret & BDRV_BLOCK_EOF && !first) { /* * Reading beyond the end of the file continues to read @@ -2513,15 +2529,16 @@ static int coroutine_fn bdrv_co_block_status_above(= BlockDriverState *bs, } =20 static int coroutine_fn bdrv_co_is_allocated(BlockDriverState *bs, + bool inc_in_flight, int64_t offset, int64_t bytes, int64_t *pnum) { int ret; int64_t dummy; =20 - ret =3D bdrv_co_block_status_above(bs, backing_bs(bs), false, offset, - bytes, pnum ? pnum : &dummy, NULL, - NULL); + ret =3D bdrv_co_block_status_above(bs, backing_bs(bs), false, inc_in_f= light, + offset, bytes, pnum ? pnum : &dummy, + NULL, NULL); if (ret < 0) { return ret; } @@ -2534,7 +2551,7 @@ static void coroutine_fn bdrv_block_status_above_co_e= ntry(void *opaque) BdrvCoBlockStatusData *data =3D opaque; =20 data->ret =3D bdrv_co_block_status_above(data->bs, data->base, - data->want_zero, + data->want_zero, false, data->offset, data->bytes, data->pnum, data->map, data->fi= le); data->done =3D true; @@ -2566,6 +2583,8 @@ static int bdrv_common_block_status_above(BlockDriver= State *bs, .done =3D false, }; =20 + bdrv_inc_in_flight(bs); + if (qemu_in_coroutine()) { /* Fast-path if already in coroutine context */ bdrv_block_status_above_co_entry(&data); @@ -2574,6 +2593,9 @@ static int bdrv_common_block_status_above(BlockDriver= State *bs, bdrv_coroutine_enter(bs, co); BDRV_POLL_WHILE(bs, !data.done); } + + bdrv_dec_in_flight(bs); + return data.ret; } =20 @@ -2623,15 +2645,19 @@ int coroutine_fn bdrv_is_allocated(BlockDriverState= *bs, int64_t offset, * words, the result is not necessarily the maximum possible range); * but 'pnum' will only be 0 when end of file is reached. * + * To be called between exactly one pair of bdrv_inc/dec_in_flight() for t= op bs. + * bdrv_do_is_allocated_above takes care of increasing in_fligth for other= block + * driver states from bs backing chain. */ static int coroutine_fn -bdrv_co_is_allocated_above(BlockDriverState *top, BlockDriverState *base, +bdrv_do_is_allocated_above(BlockDriverState *top, BlockDriverState *base, bool include_base, int64_t offset, int64_t byte= s, int64_t *pnum) { BlockDriverState *intermediate; int ret; int64_t n =3D bytes; + bool inc_in_flight =3D false; =20 assert(base || !include_base); =20 @@ -2641,10 +2667,12 @@ bdrv_co_is_allocated_above(BlockDriverState *top, B= lockDriverState *base, int64_t size_inter; =20 assert(intermediate); - ret =3D bdrv_co_is_allocated(intermediate, offset, bytes, &pnum_in= ter); + ret =3D bdrv_co_is_allocated(intermediate, inc_in_flight, offset, = bytes, + &pnum_inter); if (ret < 0) { return ret; } + inc_in_flight =3D true; if (ret) { *pnum =3D pnum_inter; return 1; @@ -2685,7 +2713,7 @@ static void coroutine_fn bdrv_is_allocated_above_co_e= ntry(void *opaque) { BdrvCoIsAllocatedAboveData *data =3D opaque; =20 - data->ret =3D bdrv_co_is_allocated_above(data->top, data->base, + data->ret =3D bdrv_do_is_allocated_above(data->top, data->base, data->include_base, data->offset, data->bytes, data->pnum); @@ -2709,6 +2737,8 @@ bdrv_is_allocated_above(BlockDriverState *top, BlockD= riverState *base, .done =3D false, }; =20 + bdrv_inc_in_flight(top); + if (qemu_in_coroutine()) { /* Fast-path if already in coroutine context */ bdrv_is_allocated_above_co_entry(&data); @@ -2718,6 +2748,8 @@ bdrv_is_allocated_above(BlockDriverState *top, BlockD= riverState *base, BDRV_POLL_WHILE(top, !data.done); } =20 + bdrv_inc_in_flight(top); + return data.ret; } =20 --=20 2.21.0 From nobody Sat May 18 23:44:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586338708358334.933999631308; Wed, 8 Apr 2020 02:38:28 -0700 (PDT) Received: from localhost ([::1]:33314 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM7AB-000719-3k for importer@patchew.org; Wed, 08 Apr 2020 05:38:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39538) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM73J-0007nK-LO for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jM73I-0005zX-Ki for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:21 -0400 Received: from mail-ve1eur01on0705.outbound.protection.outlook.com ([2a01:111:f400:fe1f::705]:64128 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jM73F-0005tu-Gz; Wed, 08 Apr 2020 05:31:18 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (10.141.175.15) by AM7PR08MB5365.eurprd08.prod.outlook.com (10.141.173.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Wed, 8 Apr 2020 09:31:12 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf%8]) with mapi id 15.20.2878.021; Wed, 8 Apr 2020 09:31:12 +0000 Received: from kvm.sw.ru (185.215.60.139) by AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Wed, 8 Apr 2020 09:31:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LzP7OEDT68wXyQpCcCXxh3qwvRwF3EErjY+vLkwyGbxOAXlefjqtozvYX8jXLu0mLVYy3o3fEz99YQZu16qJYH3Ji4N39BL8FiyQwnMqiXNt4YTVtN+o2R+5PYhx/wf+Smi+m5qm0zDgUp47bGCUvJ+Z63d+LA/tSkJF9mUA52foz4xHKT5BW+OfLfuApdWIARmVWNhOnUdNwHJU2X4R6W5gJnun/MWzFgP/TR5lNNFsbb5nb6M1IYB/o1/4/3zx5gjQdSkuWyxOKIxKPbNoC+s1ooDeaQylytG/aqjV7Qw+Upn80kyyqu0NftMvaWcXf7sJB7KPrpSVqUHOSvnW3Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LYinioNaMeufgX2ki6tcSyOUPiJ1eHXtHyHcL+Oq8Yo=; b=N3hB46fEXadS6zhD7mwDND4adEqNZj46fYh2d/ZDuZTjNqeaJU3t1cncvrKzJGIxA1OwcFlO8jRf3d3w+DyNAQpBqD1A3bFyGoZLiN7bXk2GNBDwgiBbLTWjcl5CFrZYU+NjCK25+U6GYdW0Jb2ijKRrut/Dzl1IbU0MZW7IAyES3+MlepdG8forejm4NzO9hAT52G0jKd5r8PdvpLnNsQbdUbTAVGB7hBG3Nci0T1YCfh1Ybo8ZgUUWVbSu1Zq8ivR61BsTXeA36VdavaiSiG7xHLq349Xftp2qjh9ksTT5eRJ1JRrYh/o3SvKJYYf2csv6J9XXMC865giIUAQQQw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LYinioNaMeufgX2ki6tcSyOUPiJ1eHXtHyHcL+Oq8Yo=; b=URRDv+g9qPHIVIvjeRpCs6rriduc0BACnsutU3U25lrjp1MsxLCUxwUOt3DY2BdIkIc6RJ8+VUC/APQpq3FdVZHwvnouIjvn6SkeTeyuGiKbAAQ/Q6Yah+FbwYCV3PJqQnTf+p5jNXMgFaZJlnPjnCq1nwr79QmbxlI/eruM9uU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 7/9] block/io: add bdrv_do_pwrite_zeroes Date: Wed, 8 Apr 2020 12:30:49 +0300 Message-ID: <20200408093051.9893-8-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200408093051.9893-1-vsementsov@virtuozzo.com> References: <20200408093051.9893-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.139] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d1548b69-30a3-4ed6-231c-08d7db9f93b9 X-MS-TrafficTypeDiagnostic: AM7PR08MB5365: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3826; X-Forefront-PRVS: 0367A50BB1 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(4636009)(396003)(346002)(136003)(39840400004)(366004)(376002)(52116002)(6506007)(5660300002)(2906002)(6916009)(2616005)(956004)(478600001)(16526019)(186003)(26005)(86362001)(66946007)(66556008)(66476007)(1076003)(6512007)(6486002)(107886003)(4326008)(6666004)(36756003)(8676002)(316002)(8936002)(81156014)(81166007); DIR:OUT; SFP:1102; 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: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: oyTQiQRTEhATKC7WRoTqCTQgkCfGtQFc45XFH4fAKL8z5XPBIgqkGboGfDEmiTkIl7oUWsbVlnoBPPxJwEyAqgthtmRRH7fkRw27ddwckn9ThhWz+Cc65TF3tPVHcfhVyq/d500dhHCJZu5NQfI5ox+3G4rZYJdaEKI5W1TigfBsoxx28shgR6l4A6SZM6gPaO9rck8nx7N151ptHBpR3npjRlN8KEXVaNQ8QJgUdgZA2C3pGBDNsVC46RoHjSBsZ2CWI6iQAK262cwHZsT/uDwcY1e6EnIDWx6kgVkkn4v4bAjlr6lWUm52VhEVacr7Hs7Ob8HjIzXd8jNoWzuhvxU//jRPFXekFZUzRVql1UIpyNsijW5ytAnoILn0JFH0jTpnE7h0FcJ+Z0OM+mbBm1IKOZ5dODD/nZgOe0qgtw2hMRFSwl5G+BqXgkj714kN X-MS-Exchange-AntiSpam-MessageData: jg3j9F6tBIyusp9HCDi+Sg3UCugAlm7szIISeozlkk3TNp8YUQpSymx8awkTAquDhQOWvRJRYHoMm3Or7luKYU8KApfRXv49w1cU+oFkNeb9xiYDogUNymnGzWx1YIg5t1uiGjs64oxu+U2bC/F7uQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: d1548b69-30a3-4ed6-231c-08d7db9f93b9 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2020 09:31:12.2245 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: m3BWYnvm0JKNi8MiLTVdQ2R+h0MYuVNxoPViz5qOzSb2APl2M9LyyHl1MTMwtiGrJeGFXf/4WwrrBUWs0kNLujYPbcF/aTXVWk972Lnam7w= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5365 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a01:111:f400:fe1f::705 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: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" We'll need a bdrv_co_pwrite_zeroes version without inc/dec in_flight to be used in further implementation of bdrv_make_zero. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Stefan Hajnoczi --- block/io.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/block/io.c b/block/io.c index 760170731f..b1fc8b2367 100644 --- a/block/io.c +++ b/block/io.c @@ -2016,8 +2016,10 @@ int coroutine_fn bdrv_co_pwritev_part(BdrvChild *chi= ld, return ret; } =20 -int coroutine_fn bdrv_co_pwrite_zeroes(BdrvChild *child, int64_t offset, - int bytes, BdrvRequestFlags flags) +/* To be called between exactly one pair of bdrv_inc/dec_in_flight() */ +static int coroutine_fn +bdrv_do_pwrite_zeroes(BdrvChild *child, int64_t offset, int bytes, + BdrvRequestFlags flags) { trace_bdrv_co_pwrite_zeroes(child->bs, offset, bytes, flags); =20 @@ -2025,8 +2027,21 @@ int coroutine_fn bdrv_co_pwrite_zeroes(BdrvChild *ch= ild, int64_t offset, flags &=3D ~BDRV_REQ_MAY_UNMAP; } =20 - return bdrv_co_pwritev(child, offset, bytes, NULL, - BDRV_REQ_ZERO_WRITE | flags); + return bdrv_do_pwritev_part(child, offset, bytes, NULL, 0, + BDRV_REQ_ZERO_WRITE | flags); +} + +int coroutine_fn +bdrv_co_pwrite_zeroes(BdrvChild *child, int64_t offset, int bytes, + BdrvRequestFlags flags) +{ + int ret; + + bdrv_inc_in_flight(child->bs); + ret =3D bdrv_do_pwrite_zeroes(child, offset, bytes, flags); + bdrv_dec_in_flight(child->bs); + + return ret; } =20 typedef struct RwCo { --=20 2.21.0 From nobody Sat May 18 23:44:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1586338786056553.3161695909922; Wed, 8 Apr 2020 02:39:46 -0700 (PDT) Received: from localhost ([::1]:33338 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM7BQ-0000oE-PL for importer@patchew.org; Wed, 08 Apr 2020 05:39:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39575) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM73L-0007pq-30 for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jM73J-00060m-VF for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:22 -0400 Received: from mail-ve1eur01on0705.outbound.protection.outlook.com ([2a01:111:f400:fe1f::705]:64128 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jM73H-0005tu-70; Wed, 08 Apr 2020 05:31:19 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (10.141.175.15) by AM7PR08MB5365.eurprd08.prod.outlook.com (10.141.173.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Wed, 8 Apr 2020 09:31:13 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf%8]) with mapi id 15.20.2878.021; Wed, 8 Apr 2020 09:31:13 +0000 Received: from kvm.sw.ru (185.215.60.139) by AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Wed, 8 Apr 2020 09:31:12 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oFOFb/1Mes5b0/xz+oGCoQGRufITgyIWDt1g5E709e6OXYKw3opEZRlYRkFEMKWeqEjwC7mKtXOKRMJiZyrhNR58dy/bHaZ7zBOK2gk+VzNzvkn596bi7YXL0/L++6wup/2gYDfVVcWFYwc/A0ttILf8sKwjSbadTYwalIJD5kapfhcuqyEAP6aw7f6+W5YgQ7MpJ2AjvCdpVyz4QG+U6ZcOnEb+tU6jy9wAJ84HpguOsUPJjLns8c9efxJoUefqqoiRvMqxWF6IbkENKYI17wwq8X8Qq4SmSA8X9xbefzpEze8lty82IcvgAOQL8MgF6akSIxw30IIYjqj44kLkDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=n4QTLo5SN/366n4bxRVU5Vb0x2bOsCCBOy8xcC3VaUM=; b=VOLYnHnFaoSSDCM9y0P7DXWIVQfe67Ui9icd4BSmFu/dwFEPd+cek9zOl4nmEoizWNTNuoSb1PohmeCOcWTDu9N2PITkL/3JuIWomgv4qPcaDwBVS6TAstnJW4+rh9DCxwjfoY8jhy3ubaXhiKERnCi3VSP5d+t2itrcXjbLw220BC5+LQQBuHfhnaf5UI7JgKMgotTJwt8LzvIimo4SHYZtc6hHAxGo+jbb6f1WM1CDqq7v5fhpTOxhA+ja3pXJGj1MWtwBIL5QaSWU0Wt8AD9FvKWFw2BEY9snEZSpQu0wEXFbIowAglHzP8pKlZiciCoq+7gEJrg2YNVDLl7sfA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=n4QTLo5SN/366n4bxRVU5Vb0x2bOsCCBOy8xcC3VaUM=; b=A/jVqTe9vCCFXOpeCLsyYuMi1T+Ft3jGy3/IaRN9rQmLF88RbwEbn36S7cLBeq1OYUaSXkmhnCK+tnHwD2gh2onyL9V71X1OYZh0nuWepDsWLf8T0Ygz+MSm4dESMo6EQOelmykZ/SEep9G1KB2D0X9CnPLkp15T/vyUNliPbUc= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 8/9] block/io: move bdrv_make_zero under block-status Date: Wed, 8 Apr 2020 12:30:50 +0300 Message-ID: <20200408093051.9893-9-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200408093051.9893-1-vsementsov@virtuozzo.com> References: <20200408093051.9893-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.139] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 488737e6-49f9-4aeb-513f-08d7db9f942a X-MS-TrafficTypeDiagnostic: AM7PR08MB5365: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7219; X-Forefront-PRVS: 0367A50BB1 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(4636009)(396003)(346002)(136003)(39840400004)(366004)(376002)(52116002)(6506007)(5660300002)(2906002)(6916009)(2616005)(956004)(478600001)(16526019)(186003)(26005)(86362001)(66946007)(66556008)(66476007)(1076003)(6512007)(6486002)(107886003)(4326008)(6666004)(36756003)(8676002)(316002)(8936002)(81156014)(81166007); DIR:OUT; SFP:1102; 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: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: c/Ra5NLJ2xDJZBuum+Dkw60N6y+CVB8rA4M3AEoQCmJKHapH/oTcjEUcQ7J28tOzbavEaxcjwgDKSds+zSWT6wRQR4vINcakR9sI+eDdTqLfJ3wTtXqL0t1fClKp/uVwMjD3snuZHqY6k4gchgkJpVpGwK3QL8+mf8qdHFYvoGoEOQKz/lyRLezt5whJ548PgWypovZVBXZjik5p4xFAmlyr+8gc+OwbK5m0hsKT48JMnNn/pzI+QS4DFXv8fjicFJgOI7BPqsSsHDUzkcxFGlDl1TV2Wpla4FK6t58QBLinp6ObrV5Vat82nGmiMZ2dM+BHRAdaUlM3Yftswl5ACH8FEPozp0AbhtWB954aALzkuzzWgyGM+FzGhetvg0h6RKiyumD0CdMKtECoMYr260rXQD0d3ci+j7fgnEIh/grU8Mx8VklIJ1NOsKLGwk8r X-MS-Exchange-AntiSpam-MessageData: OTlVxEv/FpepkTTJasEK/itXnYmTBfHVCR9IPHUbZT+XVeznVtpDDBtxXfzSKFo1y+99XkfXQvIPpbz8+uMzYDm0e4r8E2KQYTJQcy04U5+juDoBCfUhw8A4ovhz5eMnggn9fvWofZkGpdbFBM0oAQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 488737e6-49f9-4aeb-513f-08d7db9f942a X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2020 09:31:12.9782 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: e5bwYonACNvecXDLdSeSY3b2M1JnNhmA4FEggoGaHcbY6JHhS9kb+T2Otc7cKyblaSTH11KDWrpfeiwDF1w2kKVayPl/6rjuzikeg4ReOMw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5365 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a01:111:f400:fe1f::705 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: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" We are going to use bdrv_co_block_status in bdrv_make_zero, so move it now down. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Stefan Hajnoczi --- block/io.c | 82 +++++++++++++++++++++++++++--------------------------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/block/io.c b/block/io.c index b1fc8b2367..d2ac9ac7b5 100644 --- a/block/io.c +++ b/block/io.c @@ -2177,47 +2177,6 @@ int bdrv_pwrite_sync(BdrvChild *child, int64_t offse= t, return 0; } =20 -/* - * Completely zero out a block device with the help of bdrv_pwrite_zeroes. - * The operation is sped up by checking the block status and only writing - * zeroes to the device if they currently do not return zeroes. Optional - * flags are passed through to bdrv_pwrite_zeroes (e.g. BDRV_REQ_MAY_UNMAP, - * BDRV_REQ_FUA). - * - * Returns < 0 on error, 0 on success. For error codes see bdrv_write(). - */ -int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags) -{ - int ret; - int64_t target_size, bytes, offset =3D 0; - BlockDriverState *bs =3D child->bs; - - target_size =3D bdrv_getlength(bs); - if (target_size < 0) { - return target_size; - } - - for (;;) { - bytes =3D MIN(target_size - offset, BDRV_REQUEST_MAX_BYTES); - if (bytes <=3D 0) { - return 0; - } - ret =3D bdrv_block_status(bs, offset, bytes, &bytes, NULL, NULL); - if (ret < 0) { - return ret; - } - if (ret & BDRV_BLOCK_ZERO) { - offset +=3D bytes; - continue; - } - ret =3D bdrv_pwrite_zeroes(child, offset, bytes, flags); - if (ret < 0) { - return ret; - } - offset +=3D bytes; - } -} - int bdrv_preadv(BdrvChild *child, int64_t offset, QEMUIOVector *qiov) { int ret; @@ -2768,6 +2727,47 @@ bdrv_is_allocated_above(BlockDriverState *top, Block= DriverState *base, return data.ret; } =20 +/* + * Completely zero out a block device with the help of bdrv_pwrite_zeroes. + * The operation is sped up by checking the block status and only writing + * zeroes to the device if they currently do not return zeroes. Optional + * flags are passed through to bdrv_pwrite_zeroes (e.g. BDRV_REQ_MAY_UNMAP, + * BDRV_REQ_FUA). + * + * Returns < 0 on error, 0 on success. For error codes see bdrv_write(). + */ +int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags) +{ + int ret; + int64_t target_size, bytes, offset =3D 0; + BlockDriverState *bs =3D child->bs; + + target_size =3D bdrv_getlength(bs); + if (target_size < 0) { + return target_size; + } + + for (;;) { + bytes =3D MIN(target_size - offset, BDRV_REQUEST_MAX_BYTES); + if (bytes <=3D 0) { + return 0; + } + ret =3D bdrv_block_status(bs, offset, bytes, &bytes, NULL, NULL); + if (ret < 0) { + return ret; + } + if (ret & BDRV_BLOCK_ZERO) { + offset +=3D bytes; + continue; + } + ret =3D bdrv_pwrite_zeroes(child, offset, bytes, flags); + if (ret < 0) { + return ret; + } + offset +=3D bytes; + } +} + typedef struct BdrvVmstateCo { BlockDriverState *bs; QEMUIOVector *qiov; --=20 2.21.0 From nobody Sat May 18 23:44:16 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; 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; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=virtuozzo.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15863386425361012.2498196454094; Wed, 8 Apr 2020 02:37:22 -0700 (PDT) Received: from localhost ([::1]:33296 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM797-0004zx-AE for importer@patchew.org; Wed, 08 Apr 2020 05:37:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:39623) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jM73M-0007st-KB for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jM73L-00061l-FD for qemu-devel@nongnu.org; Wed, 08 Apr 2020 05:31:24 -0400 Received: from mail-ve1eur01on0705.outbound.protection.outlook.com ([2a01:111:f400:fe1f::705]:64128 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jM73I-0005tu-PW; Wed, 08 Apr 2020 05:31:20 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (10.141.175.15) by AM7PR08MB5365.eurprd08.prod.outlook.com (10.141.173.73) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2878.16; Wed, 8 Apr 2020 09:31:13 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::3944:477e:1562:cfcf%8]) with mapi id 15.20.2878.021; Wed, 8 Apr 2020 09:31:13 +0000 Received: from kvm.sw.ru (185.215.60.139) by AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2900.15 via Frontend Transport; Wed, 8 Apr 2020 09:31:13 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KZi9z0FTmqaPGNXvTsjTlT5qWNUT1uaMay3phHPdPeSlM5YYpQD0LBHZU6fyCx++BpNjL7Juc6g0rkQo60OIXzFDXyk1WB5snYOleijTeHqMpO1jNi5a6QQH8O3YfMsgpnes8dWNTt9u3n1g3ShQjKE+hJXMnlDBabs54lYsifn7waWUv38gHLv0nn/SSiO8GKBrIhKmdvwb47erV1BDRH7JMMHpY+BZDc1vrWI3GJP1s/qZQN5XY0qWyLUbk4Ef0Yw4xUiiL0Pwm5rkxaE7lKZgGVpX0Let5AY74sH72d9NvVruFTyLtQZXLuAP+TgJsuZksr9ogJInMvZEH+wTFw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=B/m0nfvxHVbem+siSZZ9JyxXaSxHFQx0Md3EKtMkcrA=; b=SH3Hrmuxq/wtmlF4vSm9gZnMqlEVdcoJQ0XR2/pAuh8PPVeT1p9vtXwao1RAfRFoNhIYXINrCTpJK4FBA0CWDIZ9KDHnaAKUY688XPlxOYiQmcdYoaUSxza34zi7WAYP/FwkDoRvN8STLm88C5H/4gNoTtiSi0Fyjgm0KE8TscWMtmNp9IxLcptvGguTnr6dapYT9EWRXy+dJP4nufT4G7H1Ye30xp7WHKoJLfBUHZ4ji2BRVTCBhNySgCWoAkEC/x4dU94BoylKEk+q9cSSZzsXFIqOd9Z8jBNpz1WLg4nSRbv1jueq8XiwktQSBT6KMj5mYFBhGgds+yBFmQmLEg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=virtuozzo.com; dmarc=pass action=none header.from=virtuozzo.com; dkim=pass header.d=virtuozzo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=B/m0nfvxHVbem+siSZZ9JyxXaSxHFQx0Md3EKtMkcrA=; b=Hq4VErDzRp0WQhZuhVIHES2tl/JkbZfjC+/lVNNxNT9tyrZWRyxx1VMGi+64BlEjWjZzwfeFJGkGOvpAX3HBw32C6x3Dn9YFtveYNxWQhI6koD8l7wrVdah4A6YVMhVOm/UnG35ijtyOr3y8JRyLoW0tjSXPJWNKBWGdLT3gqqA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=vsementsov@virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Subject: [PATCH 9/9] block/io: expand in_flight inc/dec section: bdrv_make_zero Date: Wed, 8 Apr 2020 12:30:51 +0300 Message-ID: <20200408093051.9893-10-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200408093051.9893-1-vsementsov@virtuozzo.com> References: <20200408093051.9893-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: AM6PR01CA0041.eurprd01.prod.exchangelabs.com (2603:10a6:20b:e0::18) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-Mailer: git-send-email 2.21.0 X-Originating-IP: [185.215.60.139] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: dce19073-ef83-4976-68c1-08d7db9f949c X-MS-TrafficTypeDiagnostic: AM7PR08MB5365: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-Forefront-PRVS: 0367A50BB1 X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM7PR08MB5494.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(10019020)(4636009)(396003)(346002)(136003)(39840400004)(366004)(376002)(52116002)(6506007)(5660300002)(2906002)(6916009)(2616005)(956004)(478600001)(16526019)(186003)(26005)(86362001)(66946007)(66556008)(66476007)(1076003)(6512007)(6486002)(107886003)(4326008)(6666004)(36756003)(8676002)(316002)(8936002)(81156014)(81166007); DIR:OUT; SFP:1102; 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: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PjxySw0d4xXECFAosK24NR9C/7goMP5594+HLR89TfLZTxmESpAYKLBvkLX73yDx9W+LZHXy6/bqsxGjXxoqS2gQYKp18pE9rtwmKz7tqQi0KN1Mucn/RhOlpJd/DXTymXpBtt8cn6yg9U08QpOIma0SJEj0rF+jkswlLIahH48/bqdJYqYOI9msH5jkjdgKMTbTre3eF8Uw5dljMCrsBRzJhfhkHfL4zstc6G/zjDEa5uByUtl6bT2jQ5/Ns3EP1cbVW6onEHxyAu4pLu/i4QVvqFV/uTGN3cM263dIVTlaA7ifV57Egt9ze3kB4twwlsROCo5LWPzpQ8NCatNk/oXW308ey8vnhwgKHgxGCxkTSx1SYcIawVBN6a7BTwb9CnQdyiKEFUKyiHE3AnOr9X+vBHAXS0CtkUBIl6fNZAJjWmdXJmVzf/QjKYrItuqg X-MS-Exchange-AntiSpam-MessageData: HLFidz/h6tsScSovR3cwMr2Ipu4WVlGdINVkDzq2Jhap9f0z+N46QSnqPeHjZW0xIPBeSc9f1Q0a345458+l8Phy567BtQmGNfdgJDtjZLBO5mMtKdn/BmXOuWq9EoYVI2eTEaWbvZKuII/5YmWCpQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: dce19073-ef83-4976-68c1-08d7db9f949c X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2020 09:31:13.7289 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 1K9HJvtqsrD01xtPWXP3mbpnqVQgWWjMh8gbg65aWzeOf8z+xvVkd0wddMItzZ8Tnh+ilZs1xcam1ld4uMfBetUjOgnkopLo9s1wpMmCuFE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR08MB5365 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a01:111:f400:fe1f::705 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: kwolf@redhat.com, fam@euphon.net, vsementsov@virtuozzo.com, qemu-devel@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) Content-Type: text/plain; charset="utf-8" It's safer to expand in_flight request to start before enter to coroutine in synchronous wrappers and end after BDRV_POLL_WHILE loop. Note that qemu_coroutine_enter may only schedule the coroutine in some circumstances. bdrv_make_zero update includes refactoring: move the whole loop into coroutine, which has additional benefit of not create/enter new coroutine on each iteration. Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/io.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/block/io.c b/block/io.c index d2ac9ac7b5..220b5c04d7 100644 --- a/block/io.c +++ b/block/io.c @@ -2735,8 +2735,11 @@ bdrv_is_allocated_above(BlockDriverState *top, Block= DriverState *base, * BDRV_REQ_FUA). * * Returns < 0 on error, 0 on success. For error codes see bdrv_write(). + * + * To be called between exactly one pair of bdrv_inc/dec_in_flight() */ -int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags) +static int coroutine_fn +bdrv_do_make_zero(BdrvChild *child, BdrvRequestFlags flags) { int ret; int64_t target_size, bytes, offset =3D 0; @@ -2752,7 +2755,8 @@ int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags= flags) if (bytes <=3D 0) { return 0; } - ret =3D bdrv_block_status(bs, offset, bytes, &bytes, NULL, NULL); + ret =3D bdrv_co_block_status(bs, true, false, + offset, bytes, &bytes, NULL, NULL); if (ret < 0) { return ret; } @@ -2760,7 +2764,7 @@ int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags= flags) offset +=3D bytes; continue; } - ret =3D bdrv_pwrite_zeroes(child, offset, bytes, flags); + ret =3D bdrv_do_pwrite_zeroes(child, offset, bytes, flags); if (ret < 0) { return ret; } @@ -2768,6 +2772,49 @@ int bdrv_make_zero(BdrvChild *child, BdrvRequestFlag= s flags) } } =20 +typedef struct BdrvDoMakeZeroData { + BdrvChild *child; + BdrvRequestFlags flags; + int ret; + bool done; +} BdrvDoMakeZeroData; + +static void coroutine_fn bdrv_make_zero_co_entry(void *opaque) +{ + BdrvDoMakeZeroData *data =3D opaque; + + data->ret =3D bdrv_do_make_zero(data->child, data->flags); + data->done =3D true; + aio_wait_kick(); +} + +int bdrv_make_zero(BdrvChild *child, BdrvRequestFlags flags) +{ + int ret; + + bdrv_inc_in_flight(child->bs); + + if (qemu_in_coroutine()) { + /* Fast-path if already in coroutine context */ + ret =3D bdrv_do_make_zero(child, flags); + } else { + BdrvDoMakeZeroData data =3D { + .child =3D child, + .flags =3D flags, + .done =3D false, + }; + Coroutine *co =3D qemu_coroutine_create(bdrv_make_zero_co_entry, &= data); + + bdrv_coroutine_enter(child->bs, co); + BDRV_POLL_WHILE(child->bs, !data.done); + ret =3D data.ret; + } + + bdrv_dec_in_flight(child->bs); + + return ret; +} + typedef struct BdrvVmstateCo { BlockDriverState *bs; QEMUIOVector *qiov; --=20 2.21.0