From nobody Sun Feb 8 22:21:51 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1646238587; cv=pass; d=zohomail.com; s=zohoarc; b=fEN+ftFXqrlEq7moXQKdhFD/J+U4P8gozqDOiFEC2UolHy8tr+B49RZRuvN/nNz5vC1OamGs7lghgV/IFf4LIFGT6QEa+gQ49i9ATyhDdHk/2OQELw742VLiR43/Gh63f+ZErT0tSEUmvEouVo26yVLnQmzaq1PSjl1nmI8a3Gw= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646238587; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=XjcSN+V7jUg4BbTkha0e0lrczm/uPm0NWYIfzxn6CTE=; b=Yujxogwwmc6iSwU3VrI3LKPmQkM/HhPmHqHLZIQhgTSVRjx6zAFezB0icE7HS16voxNrohffG37mttP2GY+2zpUFuNdThnEzQzURjnDa1r8D22uXmXi16eY41i1YzRQPHjLqXibLeFjGM6UoaRZiJU0qouIc8mt1jTa8mmzfx1Y= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 164623858793139.129169683063765; Wed, 2 Mar 2022 08:29:47 -0800 (PST) Received: from localhost ([::1]:39376 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nPRrG-0004WW-Qz for importer@patchew.org; Wed, 02 Mar 2022 11:29:46 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59546) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nPRmi-0003pF-I4; Wed, 02 Mar 2022 11:25:04 -0500 Received: from [2a01:111:f400:fe06::70c] (port=37767 helo=EUR02-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nPRmg-0007je-PB; Wed, 02 Mar 2022 11:25:04 -0500 Received: from AM9PR08MB6737.eurprd08.prod.outlook.com (2603:10a6:20b:304::18) by AM6PR08MB3206.eurprd08.prod.outlook.com (2603:10a6:209:46::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5017.26; Wed, 2 Mar 2022 16:24:58 +0000 Received: from AM9PR08MB6737.eurprd08.prod.outlook.com ([fe80::4545:8e0c:19c7:2a6d]) by AM9PR08MB6737.eurprd08.prod.outlook.com ([fe80::4545:8e0c:19c7:2a6d%5]) with mapi id 15.20.5038.014; Wed, 2 Mar 2022 16:24:58 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Uyzj7np9B8YdAuCY808H9TXHMUYALVnzpkL/b955jGR6AxBSYt8QrQ+xnBe2uqV5CbdXAlBvlXCAGr77NF4kxi1IR38oLXX2pRvFM5Limeqn4zf3N3w/E+ZYT55C0SF6NUfPaKsKK6TnHulO84+kzzgIe0LH0wha5uPUgVVgb3+17TP5FJ4aV8qpJcRYdaQSeqiL96BUYL9i4OEDHhVtpMrH0aelqIYmTh1iKj/NQOX3WgNAav7hyd4k4eQLaalHb+Y4qzYpk4w8lwiZUQVSSgS6gVYeVzlk6bigt2GAsN9HAYTUWKGgQA/0DXVS9UNNSX2mAy10HK37TJCf1uYvQA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XjcSN+V7jUg4BbTkha0e0lrczm/uPm0NWYIfzxn6CTE=; b=mc/sx2EOcVBB2fqJzcXlMcwRCeamucW6Nar5tiQczHGRkf06xIyGZTmtwaknX8sHgu6offNNwp2DIjBesnv/mbjAsEHmhrxZv9ANGeNngjIlokMLlgcMH4QXst/NV2Hixj1r3TtQQL5oXeI7/fwaBV0afymOOPEkqM5F0E1u5ktqpERmJBukpKBweAEH/c8nWyCmTc3SkZUm3bQ7f1NR8RYv8ilwFEedj2s/J6hm9jWQBTXMB5txepZ5CiGYZFpLfuM4k1H6oZvv87QwmDGRBIyjjCVdSqg5K2tscOe/VgXDac4NFjKA2QAfJrQ4AGvcdTrl0WKR50CFsMgVPQxNdA== 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=XjcSN+V7jUg4BbTkha0e0lrczm/uPm0NWYIfzxn6CTE=; b=d7r4zMyS/GygVWI73AYHwzBeeVffgGQOnzqAFjb2l1K3qGiBkk9tBe+J6RwWn/dq3NNkt3CaJbKVeyPFRKCSpzYoOCKlHC4URrYCxrIbNWr+HgbG9gXXhMwa8WVsc6hgggyYj96jMP94tomTYgDVG1sAo/gkLcaADMlBGzd6Qfw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, eblake@redhat.com, stefanha@redhat.com, hreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, jsnow@redhat.com Subject: [PATCH 1/4] util: add qemu-co-timeout Date: Wed, 2 Mar 2022 17:24:39 +0100 Message-Id: <20220302162442.2052461-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220302162442.2052461-1-vsementsov@virtuozzo.com> References: <20220302162442.2052461-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: ZR0P278CA0064.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:21::15) To AM9PR08MB6737.eurprd08.prod.outlook.com (2603:10a6:20b:304::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 16b0ae5b-f440-4671-6d20-08d9fc6930f2 X-MS-TrafficTypeDiagnostic: AM6PR08MB3206:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: x9CE0vir1WqKPtzherXgqrLQcNf3PI9ivHRLVh1mC3KDRmNa3bVldvYV/0viAmH9dnvqNPB/wCsVpm6jTcqvBABWlsRgeee96PhnW5V+25kRJIYqkbmNRorDbZu0DkvKaZH438CjWJINroYvLHcnGBni35gJa5eAKZQM6EyqFluQ188pB3c0uRfEUoLZeeScYaVO/s11vP3mzE23jSHC7/M1xFw9CU9Ezr7hOFFjF3n14i3yS2W7PtVUkouYmXx/ISGjSv2snBgK6IpLgIXXfw94QyIYKWlKD4vB3KSKK1067bIm2o2CQJ537t9Rrmcj8cQhxkIW27nfJPgdbaVGPHik6NL5kc9RuXIzdhpwOLczdcT0vYSu3tKylxuQSYzJ9KEqp2j0u0CoFGVWyiEAQamBAVgSGcjXuY98+P0qrS5bXF6b3AvE3w1ECrWc4jfCEgMhmirmf0QM76H5jxc+tYia2oN25fz411J+e2Gdg1haDaiD1yR9d6ymyDN0wt7htBdL9A9z7zjV/00GdWATQz9NzjYZFbWIPdvCYrhm4VLF5cPHVzwR01lfSBJKVlcvP5okiwpRTaI1ZT/T4K3S7ApuKZZdwUjlIAa4iKjqosIXu+3Om0a3jOYn31zrKOpr/uQSkp9rnsDTHHIvFUohHLGmpuCoyVSvCf0xoV0W0fjqj9Ys6qWMugbO7Rj2zzF+A9HGsyk5HLjyuPA+SWPY0Q== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR08MB6737.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(66556008)(8936002)(66946007)(66476007)(4326008)(86362001)(83380400001)(38350700002)(316002)(6916009)(186003)(38100700002)(1076003)(2616005)(26005)(2906002)(52116002)(6506007)(6512007)(6666004)(8676002)(5660300002)(508600001)(36756003)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?jqzlDyE6eEqnbqesL4/8EMEp64lN/d7gnPr9h1EfGIoz36J7mzAEcumWqzaJ?= =?us-ascii?Q?g1vIriOlcG3CtC1m2HalT5MQ1qBgNIJL8TtxmAYyl6iDcORHb316rRSq1pNG?= =?us-ascii?Q?rYYUUcu7O79piYxDsZgR22xzCGZnA0E0PlP0E2NKSSOZhafTI7pTpNEVahnn?= =?us-ascii?Q?eWkD85OUdzerYuiIhEaFcfnuuc0sKH3QEJsz2MiPAfu0uCXqjvAmPtNDIUvE?= =?us-ascii?Q?jKJa5PHaxQWQ5DK/wRcNL0cs5STKsU2yeL3RMn9lHAQ44+07ZW8K08c9xQeW?= =?us-ascii?Q?wiwMpOn01mM1SlQIrJnQtuoGSflEroFkXsOre3ktVpYvY4TuZ76QfnGgifog?= =?us-ascii?Q?Nrhhs4R+6lHofXKx+m3ESRu7BjSr2eT0aIVuY1Mxcd8oRJbkvcYpXoX4jnZD?= =?us-ascii?Q?hf5/nRJhvh/PZ/kiCspuYhEamwt2OPz0nKOPDWhWO96mLAK8l9eS4vachRR1?= =?us-ascii?Q?XuaEzwXV4xpRhfuJqHcgHi+pGs83eLPNYDn2bc/faCiNIwYYycxCZUgwg/Tg?= =?us-ascii?Q?Fl1zcQgt1Otc6Z97UXC9bjWUQo8qIqKuRFDfeEx6MsQ9ClIn8r7u2tnx56LB?= =?us-ascii?Q?EMLJDJnoSMRTv3wu+3Umt2xZEUx/he9HL05g93uoAC49m/WQRsQYk7sRTSKm?= =?us-ascii?Q?ToH25SVhJ0a/4qAE4jMx5Q5731JRfO+8iULYIB/IMvBZA5j4W1hvAnma/DoV?= =?us-ascii?Q?O1blBa46iHGzy1998A+pgNv+3mNhK9HmVPxzis39bTdg12gLXo5PF42FYO44?= =?us-ascii?Q?QQQ0X6w/xYw+Im6cuk9ADBx0CzLYGbSBSo4PZWCRs8oocFv5/5U4ahqeGjbZ?= =?us-ascii?Q?343QT8fRhIJlHeQwstmCckG093mgR5P2vsOIK0EK/VMJgVJUjMlfWnlSXycb?= =?us-ascii?Q?QUcMCEQSXYNZIcl1s9PVIVYqAiwx/g1dIQV6xuCrpzs4Pkeck3LEYap0TmBW?= =?us-ascii?Q?SqgibJV5Mhyv6LRaAHieuOOFiolxr629Wl5YbprIhyRTQudvlvOHfStgKvF4?= =?us-ascii?Q?MRqTIbUIWBgRCUTke0rNd/xqxQb40hCjqDqhtSC+xgS2aYJGrwK0bTF7NR4n?= =?us-ascii?Q?/zvnqo+lztCnBSnpMASfd9fLca+S7T72Pv1iLB4RkeCc6EQxEGKbMIQ3lXqf?= =?us-ascii?Q?gLzqsnck/EWFK7s0I4LKds0yJ2GYrEX+koZNFpFSdQesrVpHUFK77ULEsAne?= =?us-ascii?Q?4P/1emKvIF7Na2NB+1J4r8EGvsaOhz4LUtBXXTh7PZURVad5AtsargrtY6tI?= =?us-ascii?Q?q1DJ1+8Lplqq0ZG0Oods/Ot1l0bLUgLAODIINoFlWkKSy16cutv2XC4Y/rkr?= =?us-ascii?Q?n00MU86kpdQVeoc34Nd2uP58+tQOveJMpFtGSh3yOqR6avN/r4vWDl18ne7z?= =?us-ascii?Q?AZpjJrqmASK7v3ca0dH+t8zTK6tzXZO0IN47gd50fKOhzu6/tMElqfD1gjKt?= =?us-ascii?Q?I9HnKF+qXHhlxgUJKNZn/XPYrUh9t+ktUmU9Okg3hjBhET9okBR79vgD8FpF?= =?us-ascii?Q?9IjwOlLUqbnZAibgIBiRtKtZeEAaIGjE7gp39lGBNePtv3WL7VuArVeXOkUg?= =?us-ascii?Q?Hdhkr5bsacYMiDvCN/xc0DH7Btyx93iha+vfe5QijVuL+QVrIma5KEeyS0QG?= =?us-ascii?Q?lhnK6jRup3f2HhVCa4m+IQhJaU6ODQBeBqqxLpEHId3iJHmyFFL8DEXISnOC?= =?us-ascii?Q?thQ9Ow=3D=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 16b0ae5b-f440-4671-6d20-08d9fc6930f2 X-MS-Exchange-CrossTenant-AuthSource: AM9PR08MB6737.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2022 16:24:57.5251 (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: z4YnvX0gq/yFgxfSWl8eaQD57hGVtHWm9Zdw7z43Qq5Ox5zvVPud4qm6aGx+Lrjo12vsFC+g9KApRehEmot4llG+Bw1YlJJOAyPwnYEW4TU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3206 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a01:111:f400:fe06::70c (failed) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f400:fe06::70c; envelope-from=vsementsov@virtuozzo.com; helo=EUR02-VE1-obe.outbound.protection.outlook.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, PDS_HP_HELO_NORDNS=0.659, RDNS_NONE=0.793, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1646238589892100001 Content-Type: text/plain; charset="utf-8" Add new API, to make a time limited call of the coroutine. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/qemu/coroutine.h | 13 ++++++ util/qemu-co-timeout.c | 89 ++++++++++++++++++++++++++++++++++++++++ util/meson.build | 1 + 3 files changed, 103 insertions(+) create mode 100644 util/qemu-co-timeout.c diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h index c828a95ee0..8704b05da8 100644 --- a/include/qemu/coroutine.h +++ b/include/qemu/coroutine.h @@ -316,6 +316,19 @@ static inline void coroutine_fn qemu_co_sleep_ns(QEMUC= lockType type, int64_t ns) qemu_co_sleep_ns_wakeable(&w, type, ns); } =20 +typedef void CleanupFunc(void *opaque); +/** + * Run entry in a coroutine and start timer. Wait for entry to finish or f= or + * timer to elapse, what happen first. If entry finished, return 0, if tim= er + * elapsed earlier, return -ETIMEDOUT. + * + * Be careful, entry execution is not canceled, user should handle it some= how. + * If @clean is provided, it's called after coroutine finish if timeout + * happened. + */ +int coroutine_fn qemu_co_timeout(CoroutineEntry *entry, void *opaque, + uint64_t timeout_ns, CleanupFunc clean); + /** * Wake a coroutine if it is sleeping in qemu_co_sleep_ns. The timer will = be * deleted. @sleep_state must be the variable whose address was given to diff --git a/util/qemu-co-timeout.c b/util/qemu-co-timeout.c new file mode 100644 index 0000000000..00cd335649 --- /dev/null +++ b/util/qemu-co-timeout.c @@ -0,0 +1,89 @@ +/* + * Helper functionality for distributing a fixed total amount of + * an abstract resource among multiple coroutines. + * + * Copyright (c) 2022 Virtuozzo International GmbH + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "qemu/coroutine.h" +#include "block/aio.h" + +typedef struct QemuCoTimeoutState { + CoroutineEntry *entry; + void *opaque; + QemuCoSleep sleep_state; + bool marker; + CleanupFunc *clean; +} QemuCoTimeoutState; + +static void coroutine_fn qemu_co_timeout_entry(void *opaque) +{ + QemuCoTimeoutState *s =3D opaque; + + s->entry(s->opaque); + + if (s->marker) { + assert(!s->sleep_state.to_wake); + /* .marker set by qemu_co_timeout, it have been failed */ + if (s->clean) { + s->clean(s->opaque); + } + g_free(s); + } else { + s->marker =3D true; + qemu_co_sleep_wake(&s->sleep_state); + } +} + +int coroutine_fn qemu_co_timeout(CoroutineEntry *entry, void *opaque, + uint64_t timeout_ns, CleanupFunc clean) +{ + QemuCoTimeoutState *s; + Coroutine *co; + + if (timeout_ns =3D=3D 0) { + entry(opaque); + return 0; + } + + s =3D g_new(QemuCoTimeoutState, 1); + *s =3D (QemuCoTimeoutState) { + .entry =3D entry, + .opaque =3D opaque, + .clean =3D clean + }; + + co =3D qemu_coroutine_create(qemu_co_timeout_entry, s); + + aio_co_enter(qemu_get_current_aio_context(), co); + qemu_co_sleep_ns_wakeable(&s->sleep_state, QEMU_CLOCK_REALTIME, timeou= t_ns); + + if (s->marker) { + /* .marker set by qemu_co_timeout_entry, success */ + g_free(s); + return 0; + } + + /* Don't free s, as we can't cancel qemu_co_timeout_entry execution */ + s->marker =3D true; + return -ETIMEDOUT; +} diff --git a/util/meson.build b/util/meson.build index 3736988b9f..44392e89a4 100644 --- a/util/meson.build +++ b/util/meson.build @@ -82,6 +82,7 @@ if have_block util_ss.add(files('block-helpers.c')) util_ss.add(files('qemu-coroutine-sleep.c')) util_ss.add(files('qemu-co-shared-resource.c')) + util_ss.add(files('qemu-co-timeout.c')) util_ss.add(files('thread-pool.c', 'qemu-timer.c')) util_ss.add(files('readline.c')) util_ss.add(files('throttle.c')) --=20 2.31.1 From nobody Sun Feb 8 22:21:51 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1646238442; cv=pass; d=zohomail.com; s=zohoarc; b=kiwN6ED6MUTx8BIYe9N2FSbcJxquRBfewTgTLGyTZxj3wv2SkQKhSURb03fGKHOvDFr1zDpipJ1CuO1UTeHBf15TeI/+SJOyxv9FuHUMr849piZrvWFcc6amFAu90WcnI16kxQY3ryYw/a/Z6JlP/+Z1Q5nj7m4lIC7O41mr0sc= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646238442; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=SA/MsKR4rymW0A/gq5E0zSziC2COtExe8DXeN45nriE=; b=VYGQlTgH5miagZrOrnQL/PbSBGhYC0oHbugZ+cbF+xFAiSMXVdGMNIvnDBPNS0gfIO1ToZsto+bTVDWOB8axb9rVMDJNs5XGJjfKnnzJ6zJuS5Rbziep8iiw2YignB2PBWD8Yr3K+kUtykRqRdrXMUrHvJm/tpnM3MBeVq3DO/4= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646238442620234.3643054890772; Wed, 2 Mar 2022 08:27:22 -0800 (PST) Received: from localhost ([::1]:58304 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nPRov-0006gi-Ep for importer@patchew.org; Wed, 02 Mar 2022 11:27:21 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59544) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nPRmi-0003np-6a; Wed, 02 Mar 2022 11:25:04 -0500 Received: from [2a01:111:f400:fe1f::70e] (port=25703 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nPRmg-0007jt-J6; Wed, 02 Mar 2022 11:25:03 -0500 Received: from AM9PR08MB6737.eurprd08.prod.outlook.com (2603:10a6:20b:304::18) by AM6PR08MB3768.eurprd08.prod.outlook.com (2603:10a6:20b:90::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5038.14; Wed, 2 Mar 2022 16:24:59 +0000 Received: from AM9PR08MB6737.eurprd08.prod.outlook.com ([fe80::4545:8e0c:19c7:2a6d]) by AM9PR08MB6737.eurprd08.prod.outlook.com ([fe80::4545:8e0c:19c7:2a6d%5]) with mapi id 15.20.5038.014; Wed, 2 Mar 2022 16:24:59 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jNmqMwBsnHNgSZY3tY/i7Uj6zhu6ysTY/mmK+cD3zCoeD/pHseVpSgvuOFKsxCUiXdxfYOXNBoVwJR2aqPRHcKtlbB298/NLr1jwCFpOYeAY1zHGL0tecoxJQ7IsplCdrQeTBqpVynulwVPfKN3teId0S+/hdgWui1NKeCAQbxYpMI0OwGOFY9NmmMunDenrs55tOMCzd6lZaqI7nV1oim8AUjsZPpmyHiBltnkC05G/bQAgnCXWiq7KDzsXnaRiLk0jFmaz6ApUJBhSNZKWCCb+D1/v8KnmnovyPVRg0P4OT9NJ8jIyR/auyVbfYi0xYd+6VW0ppb6QKYSZfez7hg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=SA/MsKR4rymW0A/gq5E0zSziC2COtExe8DXeN45nriE=; b=IyJzbeCj8dNnDxu9kHsAQ/SfzaG4hNT/KF/ts+DQeQBS9um0l09rze7nwOrHhkJP7R9iUH/7lvPZToyB21BocX6ysK4vX9fOVMcOoAFRrvsgT98kTpI8N54ldhLDrnJy6yqZvquq3NpUFrG3IhcPl1gYooHHCwnCaM/VyKNmI9ixyRwo5X2QpSzPO8qNzBLNlWlutFY5lvivBkrwvQBEjWDEBRTHL7oxAI/8sKBJv2kIv851vvtmlL8xX37q2ZWJpvFzCmMKu28E8WfyUq7bAertCuMp65dZ4E6sBhNE3ge4cGLBxzH0Bn1vekpf6o7espbSDyHm0e7fHW5jDC+S4w== 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=SA/MsKR4rymW0A/gq5E0zSziC2COtExe8DXeN45nriE=; b=e0b5qtTbdfu3h1+aKYy6fGw3AWw3G4jpkhs2PvLEx0odQ0feXWkAEew5XaC685VGDVU3QZ546urzs3uiRALlLs7iQC8cPxaqJfjt2aXhiryX2gJTxx8nSaQYkv6gIxysrcmsqS5Un5qgg1lFeTwicVl7gahYSKVn7DmzfLa0HW4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, eblake@redhat.com, stefanha@redhat.com, hreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, jsnow@redhat.com Subject: [PATCH 2/4] block/block-copy: block_copy(): add timeout_ns parameter Date: Wed, 2 Mar 2022 17:24:40 +0100 Message-Id: <20220302162442.2052461-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220302162442.2052461-1-vsementsov@virtuozzo.com> References: <20220302162442.2052461-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: ZR0P278CA0064.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:21::15) To AM9PR08MB6737.eurprd08.prod.outlook.com (2603:10a6:20b:304::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 182dc62f-bbd9-4e20-e0e8-08d9fc69322f X-MS-TrafficTypeDiagnostic: AM6PR08MB3768:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: gy7e9WYKet3C2qkM+MiSVp0nsfFW9U7qw5gcxh8j3Agu9mI0pbYvG+2OuRmSAYkTIYWhe+GL4lRLzRAbF08B7wmOpcnhvb3bwpFe3KaIJ1uTvhpsL7eNODSltLlhfBoDTFQC1jNLcLbpRln8prEbdAzkTSuPw0NPkjn+JH82LKw9bGWDO6j/VPw8ydcShn5Re8hpHM3o5ckUKo80zVoA6mtvdyebh17uMrQcUg7e1jDEhqxeojLH/S5d3jmCSEZZs6D+jit6RZU6mo59XkAlXwsHzAVCFvfX93e+1L9s9PrElIIndQGEQ3xTzKjm5tsNMT4kcbIGkz/8Y7mrbOzZLlzlz8X1TOXkZMsjJCNgMag0KHJFUjS2X3m3q1tw+1pxaB4DN2xE3cst3JZBZHLaSgn/bTUVacgdRxt/KjUh2a6/nPkM5YLoXObUi6pzVztBQ9yVq8Pg8T9/xG9yqR1O98TFEg6nzW8Dcblxnn17PYPzLZmAllFvb33LIlqt4Wcmx8pNU5fMHe4fNk3exbDXPMrGQGLJWWvEfIpxbaz+U/LmDQhmX+o9zAKYi5Y4uxvm0/m7dfI5u1d5S4W59ULn2aBPxANeze+077kZXXFz5Be3NEwrB05qLXzPy1LQbweSiyELO96nm6qf98jJL9PNFI5ChBNRhplFxvxDcCw/C/+JsDueRm7d+tJD1zdrobLQCLpaIeEm2JAP2+3DrEirwQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR08MB6737.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(26005)(186003)(2616005)(36756003)(8936002)(6512007)(38350700002)(1076003)(316002)(6666004)(6506007)(66556008)(8676002)(5660300002)(66946007)(2906002)(66476007)(52116002)(4326008)(38100700002)(508600001)(86362001)(6486002)(83380400001)(6916009); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?pB3ediXIhulBMvL85Y08NvsynlCarG1Zdnavj8NDjigNJwkb1dMUlkNBhjYR?= =?us-ascii?Q?utWRTnMXhZ0vZzHjLLN/XpsrzHo7/MzmhDgcQFhh8AJIjz2mezdP5kO7ORHW?= =?us-ascii?Q?dpmzgRn4qahCW2768d8cgV7Z1QLfwah1d96dLACVIgcQV59Y7ust8bfpJBVw?= =?us-ascii?Q?LU6xOF3dcx/yyVrbwDEY/XCbQhq0C8MZITeoNqedW7Pk3fk+MJv3t1kiiGNZ?= =?us-ascii?Q?A8P1OOU3KQbBEiona6q8MILlAIeD2n8Rm524N1uEeQ5Cr0t/q2eBQFyybLe2?= =?us-ascii?Q?TvbOgbpK1KRPetVRriiYuSso75ekGHRrGFPVYDNM3fVmecbYuj6Zx7b+EQuG?= =?us-ascii?Q?Y+l3OAyVnJc6WYRjEkEzfApzY/11OkKV/xy2MxE4Dur3b0AbazNYNQE5tdkX?= =?us-ascii?Q?OMeJ4neeqQ+C6XwZPgrNuACvP+DxFVgfARTfxccFNUy3y+8qX8U4/I7J+wcO?= =?us-ascii?Q?SKgW6vpvDHzzBqf5WWGbaq05LXtPCoy2xGdA8OYSwWyJIkgKOIRUE1OWKc4B?= =?us-ascii?Q?O4N8OBInejkuqEMQ8zoCvUX4isAoje9B54MrB7DnhpqTEivXesgL0bU5HNP4?= =?us-ascii?Q?BTMcCNTTZgSNlNsvQ4EO6ocpdlln1pwEDehbGJWL3aAU319RbAzWx9DJE378?= =?us-ascii?Q?o3952s92obB8kyug5csT0v4d7uYpFVxy6SK3CMR5/JUxMRaHGJVUEv/njD0d?= =?us-ascii?Q?lezDi6V9P+m+nvRw1WUK6PV2nPrez8zBl8wB+kZAssvuBXZyFY43ud9wJOZw?= =?us-ascii?Q?+/pOn+d1LZsnD2uxaHEmEkE03bY6OwJQ1dGiwyTMkqLTOR3k4lEtz9kHDInM?= =?us-ascii?Q?QvyshqTMmP0xjQhG2RnRxsQ0mRWR7PM8VbvTn3+PQyYc3nITqFmd95EJRkkw?= =?us-ascii?Q?Gz/Mi2smQk4ZebD1KhTgLFNlT55VvuGLaEmXKqX7kPVVFt/ViRwSdqDjKQ9O?= =?us-ascii?Q?E/eMzGtOTy6I3H/db7HUAx6l0LqFs8WKjrTaHTeo8iMiylq9KdCXww9msAFL?= =?us-ascii?Q?DIAYokh13B9sbcds8ppT99sZS5FnLjDB7Z6ko6MDHStPuaKbuF4OmbYNBMFQ?= =?us-ascii?Q?9X872derOoxnojt02G55vCrwKpyEmKrobB3jquFeTDjH5+L+7o8qi1LJkSm1?= =?us-ascii?Q?S+X3kZTLkarLcGDUgyhJiDcEM+lhDrThI/kPnGOHK2aJjd0vI8f7InaanwTE?= =?us-ascii?Q?uteI2drSEXhNPhlGRRDPNPD1u+bnpL3vkMjlhmHa5svfT2SlloPPpU7mhIyg?= =?us-ascii?Q?gmf9C3Tb6K2sldH2P7HDVh3uL1ERZZnKZxkaKTm2nqu8H72pMCvtUSXXyNr3?= =?us-ascii?Q?ZOLC7pOqYWMNaNtpM8AU423SoMyqSeALSwD2/qb/ha9ZNpbWFgP07TPO1/sd?= =?us-ascii?Q?sFZ0VbdUanhfBjr6aFkfmCSx1IjMSgYdJVPfabbnUfwi/seLM79SZJ/BR22y?= =?us-ascii?Q?zFJxdikqhjUbZHhxQvSfdQ2k2HRVJ0VWPCxEYSIKKWSZ2399fnFzaYUoTB01?= =?us-ascii?Q?Px3P/c1Fd8+psmzoMS3ndpcW+0WNvab2ETcEfpySRc4yuJSneeNsx9Z//GZl?= =?us-ascii?Q?cX/bcTpvnorsZH2zCFMWuR/LjRG8Ad9TjQ9TZRnnVZBsQSYDpYSAFjB24ZJB?= =?us-ascii?Q?NUy2Bxqje0CIkjjSxxi9W3ZPaEWcNyBH8F7qsRO87NL0cNYCicqHwHcoubJn?= =?us-ascii?Q?mw5sTg=3D=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 182dc62f-bbd9-4e20-e0e8-08d9fc69322f X-MS-Exchange-CrossTenant-AuthSource: AM9PR08MB6737.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2022 16:24:59.4949 (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: 6xcIeuilRUyhlm0I016NiES+Qb+j9sWO1U+tL3uSJexzXrDkJ8l7ingI9YdAJhj73jRjyWe6zBHhudSrUKwqYY692NNkzLEER8A5a2YHY6o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3768 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a01:111:f400:fe1f::70e (failed) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f400:fe1f::70e; envelope-from=vsementsov@virtuozzo.com; helo=EUR01-VE1-obe.outbound.protection.outlook.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, PDS_HP_HELO_NORDNS=0.659, RDNS_NONE=0.793, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1646238444570100001 Content-Type: text/plain; charset="utf-8" Add possibility to limit block_copy() call in time. To be used in the next commit. Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/block-copy.h | 2 +- block/block-copy.c | 28 ++++++++++++++++++++-------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/include/block/block-copy.h b/include/block/block-copy.h index 68bbd344b2..1c9616cdee 100644 --- a/include/block/block-copy.h +++ b/include/block/block-copy.h @@ -40,7 +40,7 @@ int64_t block_copy_reset_unallocated(BlockCopyState *s, int64_t offset, int64_t *count); =20 int coroutine_fn block_copy(BlockCopyState *s, int64_t offset, int64_t byt= es, - bool ignore_ratelimit); + bool ignore_ratelimit, uint64_t timeout_ns); =20 /* * Run block-copy in a coroutine, create corresponding BlockCopyCallState diff --git a/block/block-copy.c b/block/block-copy.c index ef948dccec..e0f07e64ee 100644 --- a/block/block-copy.c +++ b/block/block-copy.c @@ -882,10 +882,18 @@ static int coroutine_fn block_copy_common(BlockCopyCa= llState *call_state) return ret; } =20 -int coroutine_fn block_copy(BlockCopyState *s, int64_t start, int64_t byte= s, - bool ignore_ratelimit) +static void coroutine_fn block_copy_async_co_entry(void *opaque) { - BlockCopyCallState call_state =3D { + block_copy_common(opaque); +} + +int coroutine_fn block_copy(BlockCopyState *s, int64_t start, int64_t byte= s, + bool ignore_ratelimit, uint64_t timeout_ns) +{ + int ret; + BlockCopyCallState *call_state =3D g_new(BlockCopyCallState, 1); + + *call_state =3D (BlockCopyCallState) { .s =3D s, .offset =3D start, .bytes =3D bytes, @@ -893,12 +901,16 @@ int coroutine_fn block_copy(BlockCopyState *s, int64_= t start, int64_t bytes, .max_workers =3D BLOCK_COPY_MAX_WORKERS, }; =20 - return block_copy_common(&call_state); -} + ret =3D qemu_co_timeout(block_copy_async_co_entry, call_state, timeout= _ns, + g_free); + if (ret < 0) { + /* Timeout. call_state will be freed by running coroutine. */ + return ret; + } =20 -static void coroutine_fn block_copy_async_co_entry(void *opaque) -{ - block_copy_common(opaque); + ret =3D call_state->ret; + + return ret; } =20 BlockCopyCallState *block_copy_async(BlockCopyState *s, --=20 2.31.1 From nobody Sun Feb 8 22:21:51 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1646238562; cv=pass; d=zohomail.com; s=zohoarc; b=kJwI/LA25oZf6SZ0PM6tZuQd+v1iZd7o0C3yMH34vsSFc+wXHroXcXms4vAbNGAWPnnHnPkD/2r/zY+cSL03mMw9bpuPkrYiXGATSTYWvov3qg+UMBvShg/SPQ3xK84Lnk3AZMOj1fF6KoTRC11Zs/NbXbwUpPdcNzPthEEzd/I= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646238562; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QfaujT/65kfb2UByGD6ASV/gXT6CqqY6QsptqLKoffU=; b=gyNYcfeC9z4LG1nEFC9wUsGDJI30yduknp4vHdP479XZFcD/CJtNSFqzsl+qzbBvZ86OC962HCPEltfMLqq6U96NbUV8xFiCK9cNnsR9ACbILPVUwWTaeXbjeOPm+3BUzwaKmm0qSNERS+dxLiqxbcMZD7fqQyD1VkaDTpqzkIE= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646238562308374.71215456483594; Wed, 2 Mar 2022 08:29:22 -0800 (PST) Received: from localhost ([::1]:37550 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nPRqr-0003Jj-9l for importer@patchew.org; Wed, 02 Mar 2022 11:29:21 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59566) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nPRmk-0003w6-Nv; Wed, 02 Mar 2022 11:25:06 -0500 Received: from [2a01:111:f400:fe1f::70e] (port=25703 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nPRmi-0007jt-TS; Wed, 02 Mar 2022 11:25:06 -0500 Received: from AM9PR08MB6737.eurprd08.prod.outlook.com (2603:10a6:20b:304::18) by AM6PR08MB3768.eurprd08.prod.outlook.com (2603:10a6:20b:90::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5038.14; Wed, 2 Mar 2022 16:25:00 +0000 Received: from AM9PR08MB6737.eurprd08.prod.outlook.com ([fe80::4545:8e0c:19c7:2a6d]) by AM9PR08MB6737.eurprd08.prod.outlook.com ([fe80::4545:8e0c:19c7:2a6d%5]) with mapi id 15.20.5038.014; Wed, 2 Mar 2022 16:25:00 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DGoZUdI74f+ooRBdpU9YH9pvKpXeJIqXVS0+M5yhR40KOUbyz8ARwVGfMGwr81YF6tOluaYjdux7WgkRMTH4Rg877NdlhpH5OSV2C5N/ifB9ehGd3xF7Qb0pQmAI/gRiWHoj4GMvjCIscubqpLUNeIH/ubA5/TSe3+F7xfad78OCkL3oR3BpazfMpOXGgcdZTV7TUK6FxF1THy0r2SkudDVQPOO8wqirOpXtfNyFcp1CWAuN1WQ90ImDLV0ZHv05+lQc6lF/MVA9LWWud+rQhGXN/OjFYBrYKpsU5sCh2mGgGZKzkdwGU/4+AbWjc/Zh/c9y/pfty01sviqXiWffvg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QfaujT/65kfb2UByGD6ASV/gXT6CqqY6QsptqLKoffU=; b=mfAEwZjmoOMNCHEt4RWI38ZU6qdT8yCXM6HuB1kTAq7ZqkUWNC5EgoPCdGpw67HcB6f5APRziGEpzfvjdUTblkaCNSjZYWzbqNt1o01xdtKSgI0CFzqg8npefu6XdX8GqTRbteH833KtLPKamNyt7LUjEhT8/RifmK9ozf/Fox9S/YOIxobOtNpzlAmAIMBuOglYrHf8hsST3liGSGwFNLjeT9JlGJG17R9BvFL+Jbg/fDar06NFap0VSoz0++0NEssAKammNEakJywuIm46qgjFRzLPk8GOP1C2YTV0UHdNuHbhDFAApJyYMRmQICq6BDWOPVz4PTuLSQJsmgxM7Q== 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=QfaujT/65kfb2UByGD6ASV/gXT6CqqY6QsptqLKoffU=; b=OUOLyJhvuhBmcZ09S3ssMxAt7gaO73dE9cSSLuuGDLlxVTVB7eAAKdpcW+aHPavpqyzPdT5YyPn5jy8xqlYpj9zEh+nowa3rNTLLQpRvZN7MKENMgIwEPH7ZMApLQgpFrj2NYNFBwDG4S3+rkoHO7MXh+2qr8Og+odVByi4zsY4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, eblake@redhat.com, stefanha@redhat.com, hreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, jsnow@redhat.com Subject: [PATCH 3/4] block/copy-before-write: implement cbw-timeout option Date: Wed, 2 Mar 2022 17:24:41 +0100 Message-Id: <20220302162442.2052461-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220302162442.2052461-1-vsementsov@virtuozzo.com> References: <20220302162442.2052461-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: ZR0P278CA0064.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:21::15) To AM9PR08MB6737.eurprd08.prod.outlook.com (2603:10a6:20b:304::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 1e5c811d-10aa-46d3-69d4-08d9fc6932b0 X-MS-TrafficTypeDiagnostic: AM6PR08MB3768:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PHPaGudwH8WjNSMLnPGnUY0+uuxXnwAJ79La7ewDTT7yN7LbYxnnig+y1AmJbAWSlV+BbEu85htYBdv86TwTV6FFfx5TCHShuqgELqb5O2VHK/zpOJfOS6IU+XYjv/Q7bNqlg7kY3WAaF6DgQBvmhFS3nUAw7s6vGXoRh+hoPYGcFbg+Mk4QiR08of0ZuaMntjcGg+Qy4mMyut6qB+6V/Jjaqk9JKA7d/BuwUstKWdeDRMWOaBc90LNcfqlNWYC219lVeR1KXa2tdCx/xXPFGUmdEMOvo3EvnZtxj/ah2JW5ouhA+Dp4o4o4oQvuVtMxQD+MXQSBL0cxa3u23AkEFk9Idm1zjjALidOwpvfammZatTSKWCqWTjw5W+JT4RpUUfQYcTf2I9UfqVeVZKRrLaU6zL36b6/5+vUQC9tlwo9tQSecl54CTidwED9G9CWG9fiI5TsrPdHoEwsg9rwoogZylor4SUNvyAGTZTOJ2hhrxh1KICenHy5AxN3XqcJ2EET+3vkAGOWeX8mrl6dgLtM8v8cXH3Y/due51EAmwPaIyhqrFLIb6X/4yw8HHZu9toXPcRFJvBUENQUrm3J6iA4oH7fDTv0Kb6aocCt+RjLlEPmOQAnOziYmJBnq9gbDBQDDO5Tb8pUnvHvAmIdIxRi/AE+1SGt+z8yc2s9m9hscOmAl8mKjI5t2KfVJC/ZmtUF87AM0zh6+WSOfN0kloA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR08MB6737.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(26005)(186003)(2616005)(36756003)(8936002)(6512007)(38350700002)(1076003)(316002)(6666004)(6506007)(66556008)(8676002)(5660300002)(66946007)(2906002)(66476007)(52116002)(4326008)(38100700002)(508600001)(86362001)(6486002)(83380400001)(6916009); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?JKcsqa8j+nZTRYX5vMd+IrhmsKMCtD4ZY8NGEU3Eiq4mdIae+5FXU3qZgH27?= =?us-ascii?Q?pUOK5s+2To0C5wrfjbqcwztKOQKBBBinRR+k2UWuFw33Q6coXiogVcgofbvS?= =?us-ascii?Q?SqEm0L/jdeU3cOPa4GHVVV+HApnlXmo6tjBXxwfhXvREYG4UOEtx3D8wWZf6?= =?us-ascii?Q?cOCCr/uZZdaUM16wlLudMXeh+Ippb5LIKE5zEI/+eEZuElLsz8Vy+QdK+ijc?= =?us-ascii?Q?IAghuMd/P40oyyKdcOKilAiAQothyZ7caW9vBnB/ggk/jf5zfx+ZsV1Wou8T?= =?us-ascii?Q?2RWKUknM2tP9oouP01rc7CHaHjHyRksLdH8HxLMv46dP5yKkn9A4Lf6y9Hwj?= =?us-ascii?Q?gDfvcTxhPJKUJ8eYPglblVBItjpmXNW2dUoITOAUlt2xLj0Oa8bFCImgmwgS?= =?us-ascii?Q?aMgQ0vuRir0sPY0rqG1wg+TIX5vVOYLX4ks4dDO+HckJPb7HaTg+okTU9wJV?= =?us-ascii?Q?vwZ/qDNLT7XQAjtDhsIBBYUGy1fPzA8AwD9Rry3JO+ZXZAqGZl0uIlzeU0YD?= =?us-ascii?Q?KntZB3oEoRZBWzLq5mn274qEY02Ex7hU2fkyLPcx4xaK9flZPaNKglM5QdeT?= =?us-ascii?Q?D4howh2bFfzqaelpK6HzXg8YTh144FrBvOPQU10/U1lpgfv6rl3Ix48V2yqU?= =?us-ascii?Q?UMU9U96T6jILgTvcrtfkrJIFfzyLzplVlLZ/NWeZOmwet5H85Zxe76TQeRaL?= =?us-ascii?Q?DOLhn56lePIGhVDEe6GFA6+MwNcMHBg6ODPl+aq5P//S2iMVlXi6kZag1W/C?= =?us-ascii?Q?0HDvFUmWaYpYoHfMOI48wMEpJ43bga66tM0SKyxOYQTXhc1C+7dCvWkQHSBj?= =?us-ascii?Q?CYUftQA7Lp5JaH8ED9BGjv6FLRDsbE3ohq8nx/p4e5C2eNnNWke36e9SZU3j?= =?us-ascii?Q?oz8fT6Zfi6PfTj4bQ1NW4xhvT685GptJvOlEafMBJiBmlEscrdL1LdKB4Hfa?= =?us-ascii?Q?SP4rOXe8eYCKHQuoOyDovsS3qrqVIDesODpqphncwagJUCW3Y51HI/u9/vd9?= =?us-ascii?Q?budvE940XF3y9eQEbexc9YQquGfaFdh9Iwr1jcRv7ETBLr7el1pAQIQ38DK3?= =?us-ascii?Q?r+dW6llV3bIclQkG8HtbNOkUc5cpbi/udYVcRsgYo462GvjgZJRIbFMrwV1X?= =?us-ascii?Q?zW7v1SSKQBDVoL4af2Cbvf+cXGATCPM+Fr+DJv54ZmmsMv+2FsUd4D0VSTPq?= =?us-ascii?Q?2rNqFivZg6/FOg0K3PdQrk1i/YlN5W+eZ+l7q2djMDeD2vazhGintY6dToJK?= =?us-ascii?Q?6iA6tblnvxfI08IT5looTaclbmR/MMHn4hqaDJOMLzRbAtaJSuHGotMF2X9z?= =?us-ascii?Q?Qacg0XP0XQOVQOsNQnUA6Ptx3gke9qfgz/DaUx3Y+teZoJR0eQMPm80pgIcM?= =?us-ascii?Q?aVwQeOE8Tx0gA+ltWgtj1IwQMQ1KD+hWXWUBHF2bt4WVkvRIa6XQ1THgF6DI?= =?us-ascii?Q?cW3M7THWcHyMI4Rn7Or+MBJKeyw1Wo2IkzUnEfp1B1qBdzeVR3CLL6jLO41e?= =?us-ascii?Q?xLTwxA+cy0+B/C+zTfr3orDA8FkyQqsX+1jIeg3wzWV2EdPG2bhusu22eeyu?= =?us-ascii?Q?7A9HAmOIRaekVy8QskVCrkgf5tJKFDOabTCLU296gVW+uixJFgdVqnyigXVZ?= =?us-ascii?Q?WGZkBN/8ekqKaelMcUymIROh2RF9P2VWuF9UCV465aIRU4//Xa6zls/tJRLZ?= =?us-ascii?Q?A9my3w=3D=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1e5c811d-10aa-46d3-69d4-08d9fc6932b0 X-MS-Exchange-CrossTenant-AuthSource: AM9PR08MB6737.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2022 16:25:00.2776 (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: xF1DZsmbackoyGf69gU+PGtVSI6WcPmpZvaOOMlpcGPqHsP9hDQn+U+gmxMsBTgPUhttIOKz7P2bTCeEs/klNATOdDE88QnRsEMkC1auCZ8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3768 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a01:111:f400:fe1f::70e (failed) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f400:fe1f::70e; envelope-from=vsementsov@virtuozzo.com; helo=EUR01-VE1-obe.outbound.protection.outlook.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, PDS_HP_HELO_NORDNS=0.659, RDNS_NONE=0.793, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1646238563624100003 Content-Type: text/plain; charset="utf-8" In some scenarios, when copy-before-write operations lasts too long time, it's better to cancel it. Most useful would be to use the new option together with on-cbw-error=3Dbreak-snapshot: this way if cbw operation takes too long time we'll just cancel backup process but do not disturb the guest too much. Signed-off-by: Vladimir Sementsov-Ogievskiy --- qapi/block-core.json | 5 ++++- block/copy-before-write.c | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/qapi/block-core.json b/qapi/block-core.json index e5206272aa..78c77049c3 100644 --- a/qapi/block-core.json +++ b/qapi/block-core.json @@ -4204,12 +4204,15 @@ # @on-cbw-error: Behavior on failure of copy-before-write operation. # Default is @break-guest-write. (Since 7.0) # +# @cbw-timeout: Zero means no limit. Non-zero sets the timeout in seconds +# for copy-before-write operation. Default 0. (Since 7.0) +# # Since: 6.2 ## { 'struct': 'BlockdevOptionsCbw', 'base': 'BlockdevOptionsGenericFormat', 'data': { 'target': 'BlockdevRef', '*bitmap': 'BlockDirtyBitmap', - '*on-cbw-error': 'OnCbwError' } } + '*on-cbw-error': 'OnCbwError', '*cbw-timeout': 'uint32' } } =20 ## # @BlockdevOptions: diff --git a/block/copy-before-write.c b/block/copy-before-write.c index e89cc9799c..50681cc711 100644 --- a/block/copy-before-write.c +++ b/block/copy-before-write.c @@ -42,6 +42,7 @@ typedef struct BDRVCopyBeforeWriteState { BlockCopyState *bcs; BdrvChild *target; OnCbwError on_cbw_error; + uint32_t cbw_timeout_ns; =20 /* * @lock: protects access to @access_bitmap, @done_bitmap and @@ -107,7 +108,7 @@ static coroutine_fn int cbw_do_copy_before_write(BlockD= riverState *bs, off =3D QEMU_ALIGN_DOWN(offset, cluster_size); end =3D QEMU_ALIGN_UP(offset + bytes, cluster_size); =20 - ret =3D block_copy(s->bcs, off, end - off, true); + ret =3D block_copy(s->bcs, off, end - off, true, s->cbw_timeout_ns); if (ret < 0 && s->on_cbw_error =3D=3D ON_CBW_ERROR_BREAK_GUEST_WRITE) { return ret; } @@ -405,6 +406,7 @@ static BlockdevOptionsCbw *cbw_parse_options(QDict *opt= ions, Error **errp) */ qdict_extract_subqdict(options, NULL, "bitmap"); qdict_del(options, "on-cbw-error"); + qdict_del(options, "cbw-timeout"); =20 out: visit_free(v); @@ -448,6 +450,8 @@ static int cbw_open(BlockDriverState *bs, QDict *option= s, int flags, } s->on_cbw_error =3D opts->has_on_cbw_error ? opts->on_cbw_error : ON_CBW_ERROR_BREAK_GUEST_WRITE; + s->cbw_timeout_ns =3D opts->has_cbw_timeout ? + opts->cbw_timeout * NANOSECONDS_PER_SECOND : 0; =20 bs->total_sectors =3D bs->file->bs->total_sectors; bs->supported_write_flags =3D BDRV_REQ_WRITE_UNCHANGED | --=20 2.31.1 From nobody Sun Feb 8 22:21:51 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1646238449; cv=pass; d=zohomail.com; s=zohoarc; b=Xdj7LoxwnsZVAgakqXLorlaIu+vIicJueHva8DCovPs0/Y9YF0Dw5Jh/P3fU5wH+my77ZvpRJ1mHi2zaufhhTpiEu4vYOdP2I6gkAMpjVGFrFf0JxNXkgss15967kJk1vaHXdfb4YDDAwVdnXbjRu13eZq/DBfc2e1B2am4GhBQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1646238449; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=19nDqOrw0zuJumRVJ5By97zO/vTNvmNYgAZxeCgbji0=; b=KJmTCegHWUotlqXjloqme22o8v7GZOBU7S1oUzqjqDPeTmPl13+QQ28aF5Jo6QyZ9dTNNCmJlu9FMb8lnLqSJO/XroLzxVMDmjlKP6yROLWKl3rsP2eEgJhawF3/5AD1Aa+ANR8dVxCP1gbWVNUYtlpaaulTuir8vrzUJOGB8ic= ARC-Authentication-Results: i=2; mx.zohomail.com; dkim=pass; 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=pass (i=1 dmarc=pass fromdomain=virtuozzo.com); dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1646238448998943.5528066724164; Wed, 2 Mar 2022 08:27:28 -0800 (PST) Received: from localhost ([::1]:58758 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nPRp1-00070M-OT for importer@patchew.org; Wed, 02 Mar 2022 11:27:27 -0500 Received: from eggs.gnu.org ([209.51.188.92]:59618) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nPRmm-000441-R7; Wed, 02 Mar 2022 11:25:08 -0500 Received: from [2a01:111:f400:fe1f::70e] (port=25703 helo=EUR01-VE1-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nPRml-0007jt-4Q; Wed, 02 Mar 2022 11:25:08 -0500 Received: from AM9PR08MB6737.eurprd08.prod.outlook.com (2603:10a6:20b:304::18) by AM6PR08MB3768.eurprd08.prod.outlook.com (2603:10a6:20b:90::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5038.14; Wed, 2 Mar 2022 16:25:02 +0000 Received: from AM9PR08MB6737.eurprd08.prod.outlook.com ([fe80::4545:8e0c:19c7:2a6d]) by AM9PR08MB6737.eurprd08.prod.outlook.com ([fe80::4545:8e0c:19c7:2a6d%5]) with mapi id 15.20.5038.014; Wed, 2 Mar 2022 16:25:02 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gAha+Idx0GAcrAELnKtChBtT7vcJr2+EtVj29hPN2shUZxB9aiJQSa8C4PJ/Bj+p+s9/OBjrIzKiEgZccWwcuzb2WXwYVEvUHk3f1NHFnzcEcdfZj5VRQMZZE2mIvbw8D7qRfEhPxSs9lnDMrnc/GUwB5ZPSnZTdGo88lanutqSayGNdazb5QOuhCNlEmjCE9BKvv3ywu2YIuA/woL9mqsVC/RwwwLINP4SXP4hqi9nkkAPCwHBzXMZnsnI0UigmkmYexe9VuqIpBxDUSdwxFeBC0chWvtrK2ia4fkrWDUYoXxzSuuk7qrVKfX2wzLm2npafdQrzqrE7aF0Pr5xzfw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=19nDqOrw0zuJumRVJ5By97zO/vTNvmNYgAZxeCgbji0=; b=UjJtceUYIyen200O+Ug/mexqJ0/K/hmtbdNB8boQcmKm0RthLPDDqocBp6zYoSBnV+wvRdAxjSq9Pxg6avUN/HQ9jhAf917NYaogWrKnHM7ibqL4v3wDauoKn01ERLckIZ6tMkEslc91rAMPrfEsQK2eVl6NPwNwfCyQAPZadJW/C9fmDRSAC6d4d4biP218MHsZytOFH0AG9QNevaP3XbyZYql7T7qgTueIaeiE0hRhPgFN+gBpn7aGl207zvii7JDSm39Qlj1an0YWaGp2WAve0FoyrmynKN6elc0KOObesaa+3vI1/RWyVrnMb4jWzbVK0495g9F3Bvg29DMtEA== 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=19nDqOrw0zuJumRVJ5By97zO/vTNvmNYgAZxeCgbji0=; b=TFKSu3aqkx3lZWi3GLEGYmASxT/I2i1FNvx7DovE2UggGXz+6oghPQIHFqBO7cnc9Nw3lY/3i12mf9DleoVhRNTMIHr0vpeKk01rvtf0s1GbmwkWrhPU/eVJsaG6SYvtM53dT+4HNU9cKiUUwAFBPDCe3pgvMMThX4FlcU/wLC4= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, armbru@redhat.com, eblake@redhat.com, stefanha@redhat.com, hreitz@redhat.com, kwolf@redhat.com, vsementsov@virtuozzo.com, jsnow@redhat.com Subject: [PATCH 4/4] iotests: copy-before-write: add cases for cbw-timeout option Date: Wed, 2 Mar 2022 17:24:42 +0100 Message-Id: <20220302162442.2052461-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20220302162442.2052461-1-vsementsov@virtuozzo.com> References: <20220302162442.2052461-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: ZR0P278CA0064.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:21::15) To AM9PR08MB6737.eurprd08.prod.outlook.com (2603:10a6:20b:304::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e54f94dc-9138-470d-f61b-08d9fc69336c X-MS-TrafficTypeDiagnostic: AM6PR08MB3768:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: jnPXm9melTrFZTwJ2wK/kG1Hza4vFzgy6YQuy+aZJjGct5Z5tEEAjR5HsA4y45bPQVxPI8uaiCN03ohgnI71MTs9iMinz4Eu9n5Njmr+oupcAMPpzBsv1y17UwK7E3TRRbmj90z6pj8FFiSXaYzjtFtT9BEBFvrI+ujv1fNfbe7TyXCpV5Mzm1Ye+JJd5VXQcDnxYd2/Ktz4+QvL2S6Fdw00tydHK+UTMOrycheq8StMFzlld71YXQvZzqH330pMSOTDFA68PLE7TZJLkbmgEt5qpNgB9qf/ZcV71bErCsMqijJYojOBne0+Aww+3igaDR8WSLYsqJhr3NVfsmPXHp5HVJwhzxOo0bW23QzXmCStpwe3P92Hl1h/WhOvWfsuOKao89WpWjqw9g6AstuRswS8Ro+pCID9fTvz/mNTR3AseKSfs6WnxwvR1Lhf6ngK3qj9DUs7uJMBSHw5vv+83mCWO2jF6jzi9DmzHkm8mGOjHSFIdFM3YCWcq31Z9XNt4loKcU87HbbGxV3iJXdn/dZsmk1q2ObZm9Q9EH2lKcAjX+1KxyG0lXDDbSnuOYhva5wJP1smKF7l+5PXzTz3tY9GfMVsnuDhroXRXOUKFGDlngAaQl18sOOn72WoW+Z+MK8NVDxTkmuiI/vGMhjA5nSfsGEWX6FrFMuKK3/P9mW4BLeFA4DvRr7isyEt7C1dgeadpYrkTqHYfxUuUP/VF8/8jEt7fCLsDT5lXNujTYc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR08MB6737.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(4636009)(366004)(26005)(186003)(2616005)(36756003)(8936002)(6512007)(38350700002)(1076003)(316002)(6666004)(6506007)(66556008)(8676002)(5660300002)(66946007)(2906002)(66476007)(52116002)(4326008)(38100700002)(508600001)(86362001)(6486002)(83380400001)(6916009)(21314003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?DvssyQcz1EuP/wregORelu4EcqnTOEaZaIQGHQ45aGkRunr/X2I8GqTBUQ6N?= =?us-ascii?Q?9XW77JASg+VN1vpNCczs+Fmofhu6TnEGk6LKWDp0YcEgmoXe433sUemh2WP8?= =?us-ascii?Q?efFfAX+CjiAE6fTz5ex6UX5WdmWmI6+548lntlLbD9DMPH/68ldah92dZz/m?= =?us-ascii?Q?lxM7023/BGzIftHM2iECwn37O4wPuniqC0LJ+PbCI0xTopknt5q4aJmMa5wh?= =?us-ascii?Q?hbbSHpHqATDIaUSNsuuTef89lAhH1fRIqQxBjNo93bnP/OU+X9OjX36IOtVY?= =?us-ascii?Q?htLPTi2EkGhiFIOzp8fDIUeke+o1q9AOY+VcAZSa5weUtASC/Rzd4Xcacper?= =?us-ascii?Q?3kGTo4VnWAbESs+/0r0f4pPCgkYY8ZWcoZNONlKzop6hcKNFxOKSrTQcXsy9?= =?us-ascii?Q?qJZUssIp0z6A8RbmRLz7Lsx/6jPfgRNNFHk5Y5JMXPDE5QZubdHF7FZIpKOv?= =?us-ascii?Q?Fgf8JmcndC8JroGX+D736N121KmD4YvSdhv76e9L5d0oV4MsyyFqqzGHI8by?= =?us-ascii?Q?8Jus6zTr6Yqime4SrVVm9j7j8dDChLFodaNiUwjX2EOTLw9xFqEG2tAKAM0v?= =?us-ascii?Q?MEe8Xy7HWLxJY2cmaBrMRVu0EBVG5ancEiVFJc25uth0FiV4Z4rVdikkPl1H?= =?us-ascii?Q?X3xbVWn6SY2je5raUnWP6dkr6hIoOgkOx2yIJLPOB23jurHv31BODajgySha?= =?us-ascii?Q?ejPzlL1VTbrqMfcokHCPuQ1zq/epIOnmlVa/6Jl3+mGo+5j7q51gJQ1tY2aA?= =?us-ascii?Q?mPr/M0zrMkkzi+NimcQQpWjE9fvdeuQljtVlGFauKrLiCtLnD5B9TWU8B8Ka?= =?us-ascii?Q?uSPga2Zmd9EO/ZXNKfOyLSHniFuxaX4hpzZwI33ZayO15TXayVHsItuk7f+L?= =?us-ascii?Q?me2qV9VoMQ0Y+STqe8Jhs0S81mROOxup9gSVuTtcBBRQIhtcSJ+3P3y3zMm1?= =?us-ascii?Q?0Q1/gOKrc9bj4o+7UG1MJZRmgG/2KuVoe3Tzy8Z8dW8lTrre88Y/U6wbZcZ/?= =?us-ascii?Q?/T/AUPdK7lO3MBkv2JjuFuxWe3B/gjsLDwQBLqOgu/faSOO2Dq00Cge7diz9?= =?us-ascii?Q?KxwqQJ0gb5+8ZhB3CueUbbpjequoQvsfXO3abfpX4hjyQogBvZQMxzLCpW/3?= =?us-ascii?Q?pwGB5NN+Xnm/4KzNuLEvdPc+EX3KX1c+OmPcv15Mv20McQKW0Nmlxh51ZXH4?= =?us-ascii?Q?C2nGSrtdi4ysnQ8oiz/sfpDx9xcCRniiw4kVmOdJkKpRhrQU72GtuA1w964p?= =?us-ascii?Q?CitW0K85wp5clijkd+Qj+KraGQhwtA6OOhx1Uyc2utxR8dWx2K1OMsHDmbVt?= =?us-ascii?Q?OkpqHysnH6A5QSh+4NqqBQda18NkpEj7oa3UFwjYUQNqIPwvOpm+Fw8/eJIA?= =?us-ascii?Q?wjXwmopnWtDevY+wEOeNJ4TKTm1ZqMcgZe9A3UJPja2tlfLbBpGK3c5SxXxO?= =?us-ascii?Q?O4BIre/diCDDsWyZNw+x03vBuuO1o6OTmnveTQX5TXp/GatADfdv2F5y2bc5?= =?us-ascii?Q?AG+4Os4AisgjpuoL9Vle1oflXCpP0JKc8z7aYJUXTkN/7p2Io0ITlFdnEi6T?= =?us-ascii?Q?74hk/zNQ1+t9Y5wZAS8jeIdMYayR2peCjUv17mZP6O6URQkj+w9mcwcXEFGH?= =?us-ascii?Q?0xZOoW+4s7Gh+9eMxswnE3KjAzSDc27Hg74TYNXpkYFXoJFLjqAScZlwNLAt?= =?us-ascii?Q?YtUWUg=3D=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: e54f94dc-9138-470d-f61b-08d9fc69336c X-MS-Exchange-CrossTenant-AuthSource: AM9PR08MB6737.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2022 16:25:01.9179 (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: 2519bDBR2wQWLg1pkGvtP0/yL6H7PRLXcmcmRUUcFnKu0llDvlFGwuhgygSEjKDyubf7vdo+mGuzivzlrIdce2+MRh+c3umH6P+8iUjKfNY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3768 X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a01:111:f400:fe1f::70e (failed) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a01:111:f400:fe1f::70e; envelope-from=vsementsov@virtuozzo.com; helo=EUR01-VE1-obe.outbound.protection.outlook.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, PDS_HP_HELO_NORDNS=0.659, RDNS_NONE=0.793, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) X-ZM-MESSAGEID: 1646238450648100001 Content-Type: text/plain; charset="utf-8" Add two simple test-cases: timeout failure with break-snapshot-on-cbw-error behavior and similar with break-guest-write-on-cbw-error behavior. Signed-off-by: Vladimir Sementsov-Ogievskiy --- tests/qemu-iotests/tests/copy-before-write | 78 +++++++++++++++++++ .../qemu-iotests/tests/copy-before-write.out | 4 +- 2 files changed, 80 insertions(+), 2 deletions(-) diff --git a/tests/qemu-iotests/tests/copy-before-write b/tests/qemu-iotest= s/tests/copy-before-write index a32608f597..265299957c 100755 --- a/tests/qemu-iotests/tests/copy-before-write +++ b/tests/qemu-iotests/tests/copy-before-write @@ -122,6 +122,84 @@ read 1048576/1048576 bytes at offset 0 1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) """) =20 + def do_cbw_timeout(self, on_cbw_error): + result =3D self.vm.qmp('object-add', { + 'qom-type': 'throttle-group', + 'id': 'group0', + 'limits': {'bps-write': 1} + }) + self.assert_qmp(result, 'return', {}) + + result =3D self.vm.qmp('blockdev-add', { + 'node-name': 'cbw', + 'driver': 'copy-before-write', + 'on-cbw-error': on_cbw_error, + 'cbw-timeout': 1, + 'file': { + 'driver': iotests.imgfmt, + 'file': { + 'driver': 'file', + 'filename': source_img, + } + }, + 'target': { + 'driver': 'throttle', + 'throttle-group': 'group0', + 'file': { + 'driver': 'qcow2', + 'file': { + 'driver': 'file', + 'filename': temp_img + } + } + } + }) + self.assert_qmp(result, 'return', {}) + + result =3D self.vm.qmp('blockdev-add', { + 'node-name': 'access', + 'driver': 'snapshot-access', + 'file': 'cbw' + }) + self.assert_qmp(result, 'return', {}) + + result =3D self.vm.hmp_qemu_io('cbw', 'write 0 512K') + self.assert_qmp(result, 'return', '') + + # We need second write to trigger throttling + result =3D self.vm.hmp_qemu_io('cbw', 'write 512K 512K') + self.assert_qmp(result, 'return', '') + + result =3D self.vm.hmp_qemu_io('access', 'read 0 1M') + self.assert_qmp(result, 'return', '') + + self.vm.shutdown() + log =3D self.vm.get_log() + log =3D re.sub(r'^\[I \d+\.\d+\] OPENED\n', '', log) + log =3D re.sub(r'\[I \+\d+\.\d+\] CLOSED\n?$', '', log) + log =3D iotests.filter_qemu_io(log) + return log + + def test_timeout_break_guest(self): + log =3D self.do_cbw_timeout('break-guest-write') + self.assertEqual(log, """\ +wrote 524288/524288 bytes at offset 0 +512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +write failed: Connection timed out +read 1048576/1048576 bytes at offset 0 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +""") + + def test_timeout_break_snapshot(self): + log =3D self.do_cbw_timeout('break-snapshot') + self.assertEqual(log, """\ +wrote 524288/524288 bytes at offset 0 +512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +wrote 524288/524288 bytes at offset 524288 +512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read failed: Permission denied +""") + =20 if __name__ =3D=3D '__main__': iotests.main(supported_fmts=3D['qcow2'], diff --git a/tests/qemu-iotests/tests/copy-before-write.out b/tests/qemu-io= tests/tests/copy-before-write.out index fbc63e62f8..89968f35d7 100644 --- a/tests/qemu-iotests/tests/copy-before-write.out +++ b/tests/qemu-iotests/tests/copy-before-write.out @@ -1,5 +1,5 @@ -.. +.... ---------------------------------------------------------------------- -Ran 2 tests +Ran 4 tests =20 OK --=20 2.31.1