From nobody Sat May 18 19:12:37 2024 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=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1624626208; cv=pass; d=zohomail.com; s=zohoarc; b=VV0Pn3rShNvtN7w6Bw2CNHytL2Ex3E+YH8ilbXMi3soYMywZy9nIW+Iha1lmvT5LZsdCbk3s+jw9R6jtztGXF3JVjb2kHhzBtLdY7Yrxc8X40o4i1sr2nizyNEJfjvQURdk3tzV9BMqLNCqCAwUXgd13ykiXak8MRKoPyGYySfQ= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624626208; 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=tA3COITSVeE0ZDC6pPMu1nkj+OmAtnJSASxa5Ml65SY=; b=cPAPEUHGLn53hRdmUM3lYWyF/5uXfo+va94tt0Dqs1wUQbFKzCrXVQPaxWp1/qAumKpkm3MvNBQnLg5fxo5EduN3yEn+XVsraT4qkI/ef7szu093l4Uw6W5w47PLanxnjVMgWhqVdMyKzZtLgr+8b57BDOC+JY1P1DYGjNMtsrs= 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=1dmarc=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 1624626207992966.6591686953745; Fri, 25 Jun 2021 06:03:27 -0700 (PDT) Received: from localhost ([::1]:42406 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwlUT-0003f2-RP for importer@patchew.org; Fri, 25 Jun 2021 09:03:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43324) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwlRg-0000cj-Ae; Fri, 25 Jun 2021 09:00:33 -0400 Received: from mail-vi1eur05on2100.outbound.protection.outlook.com ([40.107.21.100]:13120 helo=EUR05-VI1-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 1lwlRb-0006Cd-C6; Fri, 25 Jun 2021 09:00:32 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM5PR0801MB1652.eurprd08.prod.outlook.com (2603:10a6:203:3c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Fri, 25 Jun 2021 13:00:22 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955%6]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:00:22 +0000 Received: from localhost.localdomain (185.215.60.221) by HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Fri, 25 Jun 2021 13:00:21 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DYLjxDkwZ3VW3AIXE8zQw4yL5768twiBO8GFqtOxyfAH/ozJfL/jMkySKlRGhYq8Lye3mH0M0RXUG0nnZlnR13Q35AnfsoGO6M4nDwJEmJr2a59VnhyGGWwpG+CfZjzF6bmYiLn6RJ+DbmzVoJ0N4zP8hc8qYouo5FFMV8fAc1g+NJqC4C5SnfSmvgdoGQsHrh71QrBQ7+aLAia1iy4KsksgRE8NzSngYqSqhhrAAVIjAKcjGeR6KDzGgWtHRESWlAEVc5n5DiiPfZMmOylOjLYi97rMvXHPdJKVqNDbXAtld05MB+l79jlU1WJ2BgIDjj4AiCsTzWIHfhZFuKR31A== 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=tA3COITSVeE0ZDC6pPMu1nkj+OmAtnJSASxa5Ml65SY=; b=RPiKxNx0G7SIp8AdoDTjCBB8gbS7Vcb6U5jCBkKJm9A6WA2iy07EgGCB+gum2NbE0Ao9EOSroSeGxpJ4CZ0OWISG/Ci3mn+V7e/EasgV1aV0OiG/VVPSMfgTzCe0yneiyPxBg+lZV/bZ1d2lQXkFnzlj1nwmPzlYHbqeq1XPu8gimlvKURRRFQMw9enB57NGl2yuL71/RMdfBhPmsUeQr4ODqOrhRzOlxBZ+/crzCahsRhogtqpvbhSuHRSdJIJ+lbdlzJmFriBWg4pY6Wwh8Rq+YVfdx8g510Z8LmjhQMe2XIuzJ4/TNOkENxN+h+lOgwP7HQqOw9IO8Fk379LovA== 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=tA3COITSVeE0ZDC6pPMu1nkj+OmAtnJSASxa5Ml65SY=; b=oQ3Wh6j4wfoHdxbP3GKgTugWA4hoNzDPhnS2VI4Bh8XYuRn4eFirdm3gEYg5KtxpsKslHWp0OupmldBv5UsS8uLMi/iD2J3exWiEP9klFQAWdxj0IaNJ7qiF+HtC6w1Q1UT0Zv+OHJ2kFLpEL7wBJwufHdSm+aa49AODqgWoteo= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com, pbonzini@redhat.com, stefanha@redhat.com, eesposit@redhat.com, peter.maydell@linaro.org Subject: [PULL 01/10] ratelimit: treat zero speed as unlimited Date: Fri, 25 Jun 2021 15:59:57 +0300 Message-Id: <20210625130006.276511-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210625130006.276511-1-vsementsov@virtuozzo.com> References: <20210625130006.276511-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.221] X-ClientProxiedBy: HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 652c2d7f-c11a-4f41-2fe7-08d937d9314a X-MS-TrafficTypeDiagnostic: AM5PR0801MB1652: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2958; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5FjyWbX5/x553u8V+bi2fYn18QINuUNFSGJbt2C+Gvuyd3U3/xnNQbRQFDaln4numzwGpUdHdvEn4qxMw/KqL4k5yakkWqUR8Q5OYagfvBNj6fWixsLQs+Nz3EYWGz4rYvSiSA1dqPlICCyuOL/0h3Cy+oM4DzcZ3gdEeWJpP8omm7in9jJTxY5kkBbmXllQfrSDVnH4LWiwC3O62vmHsshTlA7SXbG6I0IVpMGeuTVbprJ6NXHXBFDhTcIu8UOWjjPb9CHNorTd7SERq6wbf7nssihve8qycqp6YheFSRxXGbaQq/4E+vquWKtdSCHlw4+/JM4zdVOFemm1bkxLF5O/X3dm0CL/TFoGoygocQ6dOLBvmDBwIUWTUvL3Yqdli8FvpEUs3oCOmUIP+iLUac1yXCjVw720nOYkGmfRZ+GRAEdB7y8hOolCtWzN/3q9Cofb/d+XpEHZUNitIlMdQxevfahfg2GaaKjvV+z1AsCKNKEAGh8V72lUugUOwvlYv8SUq9bD8vOjDG2uiYwl5VcvoZyrxzPgTzxUJXxXdLd1sKKBpIxpLcaVerCH2OQrtx4RYStpf1oljXr0PQ1gHfbP5wLVi3vtRnydo2T3Gpi9W8nz9zTnvBeYhJRknIwp4YpVLsq2/egHvhROWVKk0rh3dKfyAVqtQ6ujMAoJr4JiQdAi9hls4DyQRmlUx5Siu6qZiZBQD/h/KWyNngkoqeJoqnBhv+YR1I1RprbN8nV868opwfBiQtFSDyD/xrQM 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; SFS:(4636009)(39830400003)(346002)(396003)(136003)(366004)(376002)(38100700002)(38350700002)(52116002)(956004)(8676002)(66556008)(2616005)(66476007)(6666004)(2906002)(316002)(8936002)(66946007)(186003)(6506007)(16526019)(26005)(4326008)(478600001)(1076003)(6916009)(6486002)(5660300002)(6512007)(83380400001)(36756003)(86362001)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5AnX5pHWH8oZijInHdZVdGGNC55DH79Ny/JAMH9lcQXKd4dNdqtXLDV/XIMU?= =?us-ascii?Q?1T/ITrxxY99ni0C/4hf+2W8XJdQ3zIoSHYdjItjiEsyMmG8G3jFqTsg9bMUR?= =?us-ascii?Q?H/a6bgtf6R9RZor5sMcO8/injne+Nvp1yRaNzhyUhzZ1FPfwYNeU0IYjhey9?= =?us-ascii?Q?JS6O4JvySwXSN9KP4F7Tt83oBl2/VVvqE2VyY6FKAZAUJ0kB0c4ygsI2960E?= =?us-ascii?Q?b70sO/SgYg0TgNCq69jRq/QM1ioGwJAjtmOcTB0SbQ7kNeFEW45uqJ+JzS3p?= =?us-ascii?Q?EbgsPzf6oJoDzhMxzx7UUcIMTGuKiAfrJkduJcqVODSyMRFAqUL7MlRvMRuR?= =?us-ascii?Q?zRvl9Lexlbg2ADSAzZpi/LOr8Wyp378xpBwpYzBjkjjP1PGBdqptby+ojxEu?= =?us-ascii?Q?bW7UYUCf/ytm3SVCcxPLF2lsaj42mVfLLmG3UHNyWB250X9agAv+CJL1SvBx?= =?us-ascii?Q?NTDwktRb15DmVwtLkmdOj0g5K/fSwS/m8zXKwB8eU3Ypwys+E1Qr+AakK0bF?= =?us-ascii?Q?ne8MZSV0ZEftSuNZ/9d8ktt2rTAOoB1oYbOYKXGO969+4Us27g8EwqIuRPjg?= =?us-ascii?Q?LSYQ2tUynFYwdHWvOJ5nZxBEXuafXWIS+rDCwgvGwzKE1P3UYDsA75fSP7ZO?= =?us-ascii?Q?/X8rcWvQ6kKmOxcJzVWLvDsKeVKfmlw86f/QaCIxQghZ8+9b/Xu+/7tViIdr?= =?us-ascii?Q?WviPUTQ0pQtJLje9c52aowT4IjSvU5AC1pBYVoswq4EErjDQu9um1QUyluh3?= =?us-ascii?Q?2g/bBhajlNszvEkNMh2iOpTxn7nqBmpriRWNYyDRKetQJriVlfc/UZgYIAiJ?= =?us-ascii?Q?YJJ7/cJ8yzcJwlR0Kd/cQzBggTRHoFR/FrFkxOPHKHhXrvMA8ZUoX0FuHlBy?= =?us-ascii?Q?+eGlSbetYurdYcwfOyAeu7ImjNG81RgOtxCx9jdIJEHih8X7ECGkEagRuT5J?= =?us-ascii?Q?RZKD/C2dZkOEBybj9A/aW/m9cMCeeBEi3hDpEp3SYuDF04GHkCO69UM/ztzx?= =?us-ascii?Q?Mf06tLojwaLxQvUNKbLbNOZGn49UsSKshGnit1Xl5l5PtqYgFxLBUxCWByul?= =?us-ascii?Q?QLlruFtqMmBMSEL/dHPlbGg65imwj7p0htIIEbvQ+ARb0hJHb2o5lpGhhhPw?= =?us-ascii?Q?NTv88MBKIlk7UvkYumVJkeKvNRMBo49hxwwk6WU3OOzfa18IE/jMKgHDtOJC?= =?us-ascii?Q?gEKsb4g/YHSeVxNgBceTN/u2KzBgLvkJNIOv0Q+KH6U7oF2ClegB2V3izHKe?= =?us-ascii?Q?5lRbwsH7XkbI9EuZwB29SOQXMpTFaCC7QobmdOf1iYtJOjBRQjzcIUFslPUI?= =?us-ascii?Q?eC/bXJrKP2Xnce/Ypc/ZqFvu?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 652c2d7f-c11a-4f41-2fe7-08d937d9314a X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2021 13:00:22.5445 (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: R8CNm6+nMTvYK2Ko8pTNzCqgGHja+aawrFUtJoyNAhmRtuAtjCd/Eg+451bgB/zl9unIwqudL8tYjF3p2e4kOM/FgJKRpAbMbP3GTxgv1Ig= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1652 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=40.107.21.100; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini Both users of RateLimit, block-copy.c and blockjob.c, treat a speed of zero as unlimited, while RateLimit treats it as "as slow as possible". The latter is nicer from the code point of view but pretty useless, so disable rate limiting if a speed of zero is provided. Reviewed-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Paolo Bonzini Signed-off-by: Emanuele Giuseppe Esposito Message-Id: <20210614081130.22134-2-eesposit@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/qemu/ratelimit.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/include/qemu/ratelimit.h b/include/qemu/ratelimit.h index 003ea6d5a3..48bf59e857 100644 --- a/include/qemu/ratelimit.h +++ b/include/qemu/ratelimit.h @@ -43,7 +43,11 @@ static inline int64_t ratelimit_calculate_delay(RateLimi= t *limit, uint64_t n) double delay_slices; =20 QEMU_LOCK_GUARD(&limit->lock); - assert(limit->slice_quota && limit->slice_ns); + if (!limit->slice_quota) { + /* Throttling disabled. */ + return 0; + } + assert(limit->slice_ns); =20 if (limit->slice_end_time < now) { /* Previous, possibly extended, time slice finished; reset the @@ -83,7 +87,11 @@ static inline void ratelimit_set_speed(RateLimit *limit,= uint64_t speed, { QEMU_LOCK_GUARD(&limit->lock); limit->slice_ns =3D slice_ns; - limit->slice_quota =3D MAX(((double)speed * slice_ns) / 1000000000ULL,= 1); + if (speed =3D=3D 0) { + limit->slice_quota =3D 0; + } else { + limit->slice_quota =3D MAX(((double)speed * slice_ns) / 1000000000= ULL, 1); + } } =20 #endif --=20 2.29.2 From nobody Sat May 18 19:12:37 2024 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=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1624626538; cv=pass; d=zohomail.com; s=zohoarc; b=cRuXfnuutL2Z0klDl4r03b8BAIHAY/H+hY5YXQEVsgvEQ3RXQdLZaS2cT/rsBr6Y+6eLn4ihlJwtC+lLz0duQPTWU5n1KCyCJrn1WpKebXdZsZGrl0FLponokAOrY7W1lYaaAQA8QFp9BIOfBZ7Eh3Si/9PyfhRZKVXHQvTjGXI= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624626538; 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=3JvVpH8t9tUG1kNkFVLiszwYg2rDuEeJBxCcZEEAOrA=; b=A/l7unwhr/vEA495kWZtFub0zVtCsDof6GjYQ0HKLOE/2u4DdoOWbd0avSwriCxJDWSqtfZnuVoqoqeC9Jskpk5Lj19hM1q8mqTXdtK+DnZ7Rj9HyzHsUYNSDHBLz+ZBgQyyy0leZB94fxmX8q1XlFgltrMJ0xKH8QFG4sHqLEc= 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=1dmarc=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 1624626538119822.6399345536106; Fri, 25 Jun 2021 06:08:58 -0700 (PDT) Received: from localhost ([::1]:59224 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwlZo-0006gb-U3 for importer@patchew.org; Fri, 25 Jun 2021 09:08:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43508) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwlSA-0000vm-LL; Fri, 25 Jun 2021 09:01:03 -0400 Received: from mail-vi1eur05on2132.outbound.protection.outlook.com ([40.107.21.132]:46688 helo=EUR05-VI1-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 1lwlRw-0006Hb-Go; Fri, 25 Jun 2021 09:00:58 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM5PR0801MB1652.eurprd08.prod.outlook.com (2603:10a6:203:3c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Fri, 25 Jun 2021 13:00:23 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955%6]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:00:23 +0000 Received: from localhost.localdomain (185.215.60.221) by HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Fri, 25 Jun 2021 13:00:22 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OjBuYzwlU5ch5wT8Faz60bERUFpZvkWpFMxHn8GvnFoMUR/4rP2pa9UuQUq268pzDjcPfybMRsamFe+1lEn05KkWr8weF7ntODk+uEORs1Nmet0lyALGV8GQIFru+OHeEG6Ny+3E9HJtOq4OID/7QvLpdJHOvCv9G8PMlc9ZvPmGSI/hyADQbWrGNbBSZw73EvKN/dgzcNUwZTXEOIAIJwS5sRT7rL7Dx9TfKlhu2NnuO6GG/S0Aa21NQwpFE96hyTjF86XHjdklc1wqITyfOd673sKOcoPvbtpmGeLSxMdv3ucCACIWnd/WxBMed0rq0FdUcdGLYTins1eDTqmneQ== 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=3JvVpH8t9tUG1kNkFVLiszwYg2rDuEeJBxCcZEEAOrA=; b=UNpNl/xej8o0KgQt4Ung0wjgKcKyH+ak+0Iq34QjtjZvgG45cnoUqeGJjUDnsX+YFZoSGb2RfLdgVv5p+EJpI+Ilbg2WYIHkZ/fGjJ3Qi6d1APUC59tl7WpC5lnxYZhes8NINAILTAmx75m6rE0YTsLMnF7bTgZAgJaxVo0XrPRgIZI+4vb2HH1t2bQ5ftxTREoyz5le7bAGImqEYychuEi3eR91FZS6FBP1DnEPuFWonZtOOFT0BrXmmsA0ToLZ8nkYLMPkY6nHH4HF6X4NMypT26r7pmwX5LaaKKCRqgrLBEduo8Akuc2DSy3383ob4IowsCfES0B1gQqhp52hgg== 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=3JvVpH8t9tUG1kNkFVLiszwYg2rDuEeJBxCcZEEAOrA=; b=sgs80VrMbWkqVZa9R3KUS1JaJ4wgS3h2a5tEb89/sC/lL2GZ93wLkftd0yjilRBJGgUT9bvVaR4Vye+iHwHDEgGjMYrWJOlRW7CROLDVGb963QDw/Ka5wQwopBsX+iW3vP5YMqnCeR4/1ltzTelhWLqtGIlX0sh/Kbh4/KFzDAk= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com, pbonzini@redhat.com, stefanha@redhat.com, eesposit@redhat.com, peter.maydell@linaro.org Subject: [PULL 02/10] block-copy: let ratelimit handle a speed of 0 Date: Fri, 25 Jun 2021 15:59:58 +0300 Message-Id: <20210625130006.276511-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210625130006.276511-1-vsementsov@virtuozzo.com> References: <20210625130006.276511-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.221] X-ClientProxiedBy: HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c4989172-604c-4ccc-c260-08d937d93209 X-MS-TrafficTypeDiagnostic: AM5PR0801MB1652: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:16; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 61RYiY/WHZ9SqCQDpNcV7sG+wYbOE/NR/9L+l0WyEJXEnuwUf2KW0ygHrLs3LQGl8VjPTaRv6Zb5I3uzDY7KmU8mHp0QljY4TgX5wPucVUSjAuja72NVEiKCoonOV1iB5KokpSKXCqr/V9tLAbv8Y3VFSwoklCuw9U91W7AQldzc57GGX3tPD6/uGh0+1EJEbgz561nv9zwMAKKkST0yKMqg8pgKkkxyWP4a+KjdVn0EKHPwmRAHIs6abFPN9e970IAMBxlCE8zBr0vdyueqpqAae4prqmr2noGpI3yXqXRfsCkac7oomHaUaaE7cdp63QZbgYzka8b/hAJEiXRhQMv0rfsCai2myVGLr2ps/PpiGu1OGwZ+SmT7LWMKq9bf6e/SSN4w2HwJMuiU+pJ5wsLWecPfyjgVIV8WfmcaYUQsYPQTMHHp1jBshLWkneS073KHy9wXszi03fi5+B2NYGbi2xXypHtRM1S+G0gfIYGcUlTXwA+La+VnHqrEoIaXuUVaJupcKUF0K3450khlPAJq7FK5eWgP8ISRMAEYqnACdwtHQ5a32VLRNu56aNHC88zC2qWnrJQoyV8JTDJea9wvmpCI6cBmGywQCV5jS6E/86D60a+WFFBY9JumxkBiyobCC5VyygBijyjgsKglgazyO3GAz7kdb4P28gf6TJgK0pydjccSYtd2Gim8xOAfe6sI8c2GiNWlASUjCRx79WdoogamH4M8XF+fesllWinGlKROGmABIzp9XnrTkaWF 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; SFS:(4636009)(39830400003)(346002)(396003)(136003)(366004)(376002)(38100700002)(38350700002)(52116002)(956004)(8676002)(66556008)(2616005)(66476007)(6666004)(2906002)(316002)(8936002)(66946007)(186003)(6506007)(16526019)(26005)(4326008)(478600001)(1076003)(6916009)(6486002)(5660300002)(6512007)(83380400001)(36756003)(86362001)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?yRBD15UXMrVZTB0ayVPDkoj6xqpWGjKQZvxO5Qqcx0Bacqz2+Psc7R7aR4MC?= =?us-ascii?Q?caduIFbAGQ6Mf4/ByxCTvCa0QrDDb3AifV7d5lyyC6IL/r6Av/ixtkgwDr5j?= =?us-ascii?Q?yAKpZPFANEFdvaKrk8CuLBbOljBPXOl++lmCU0jLSr+diL04pRFmA8HusCRZ?= =?us-ascii?Q?Ry8XKKgImKboL+3Barb/tSCU0za/xxztlAnU0RD7uaGu5MZJvEDHxc357Jkp?= =?us-ascii?Q?eKHt232YFqALIOjfNDi4URSaA/ohEE2RG+M1RzdhQ7BXhXXR2J7Y8W/1CPAd?= =?us-ascii?Q?RfTCRiDC+dGbRyRiMGSmkfio3txfMKx81y8+t8ZrgL0gnKUZFDTqyJ48O3oz?= =?us-ascii?Q?pJmYFNWLYWCT/tu//+i9KX/h5/B3VT4tHIikgp47U+HKteCsjlSTzVFR8CrJ?= =?us-ascii?Q?2gkD9X1HgLQtgMtGcUuLKWPr3jL/U6TYUSt+Z2oZNk24n4m65p9gNWEBRecd?= =?us-ascii?Q?sEEZ+QpyYK/YR/g5x+JZcT8wznG+/na1P9OWU83z+r4RyMfJuxAWaaKcZ+IC?= =?us-ascii?Q?Bs3Wt5NSVKyb83R+cYBF5Ghs1gdZ2KUwwhjcVL1QRI6Pcvff2pawiivOQT+0?= =?us-ascii?Q?UBPGzyarz2SREFGdqURhzgi2v/L9ltze3BLoM0Kghd617WUScqs4kiL8Dun9?= =?us-ascii?Q?0sSphHMuRZnYqhGUX7gumX9RQCaWSArMBM+0ozRxh/ACz8+z22jqgke8vk1F?= =?us-ascii?Q?tCB4v9KD9HIYprAHFkq6fQWDZEH9QK1pEhfoxY8Yn2FZKxTFn5uk1lb0Fkt5?= =?us-ascii?Q?W7HTS/Y+H6VNUFoc4yOaYYFKTD5b0qSRdACX4BCxRsILY5fljN2lbbJe1gkA?= =?us-ascii?Q?5EEFrGBbzMnrs1GhRk486mFNPAG0a/cQy0E5cwLXas2kiKjsrWoa41hjHCHk?= =?us-ascii?Q?0OrXH7Qa33cu0sAr2zBvGkDsQ85KhOd1znJIQ2vPNJyFLrgrmTD/Rzwi4VId?= =?us-ascii?Q?4mIE5oxKcgm8H7/6h38yB8C955wz/FuMMfptEubWINNfE8zNriOsCibWeu/6?= =?us-ascii?Q?E10pD8/U2awkkCYUwWIEPcygL+0K+xUK9aYZk1Be8S20DZX9/0fdMzMERIxO?= =?us-ascii?Q?7b03FPNpO5vzW9n1Bc04Jkoio8f5wOfbdoiEWp/S9ncu7077Lj2a3iOQ2HA3?= =?us-ascii?Q?dGvqJGK5KgDutXhH8uEP2EUqqiTBHPOFqd0X9CV5zZICBtVRj+l7jHFfTJRs?= =?us-ascii?Q?SP5NmRO2b+4aQg/r6NC/qDgWcxIaNa6R7V/Qmr8xB2tjCKg6xS1W01YU+HuY?= =?us-ascii?Q?fZv+b+HXk1EW/NaG0Fr5Hy+MThRLeS5+wUI4Mk/jOwonraxYaG5+UW6W1Vy2?= =?us-ascii?Q?lJ56Uw1xIZNMOamdHDQidKY0?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: c4989172-604c-4ccc-c260-08d937d93209 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2021 13:00:23.7722 (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: 9lscCZgokhDuMSGSU7+5312JU+KWixrAu6OPDOhlXyiP41/ZieBAP300PojcxriIkOzsZlO6ozBGIovVsDFff7ZKiLxXkt5FY/J0Zn7TCbo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1652 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=40.107.21.132; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini Reviewed-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Paolo Bonzini Signed-off-by: Emanuele Giuseppe Esposito Message-Id: <20210614081130.22134-3-eesposit@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/block-copy.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/block/block-copy.c b/block/block-copy.c index 5808cfe657..020f9846d8 100644 --- a/block/block-copy.c +++ b/block/block-copy.c @@ -114,7 +114,6 @@ typedef struct BlockCopyState { =20 SharedResource *mem; =20 - uint64_t speed; RateLimit rate_limit; } BlockCopyState; =20 @@ -647,21 +646,19 @@ block_copy_dirty_clusters(BlockCopyCallState *call_st= ate) task->copy_range =3D false; } =20 - if (s->speed) { - if (!call_state->ignore_ratelimit) { - uint64_t ns =3D ratelimit_calculate_delay(&s->rate_limit, = 0); - if (ns > 0) { - block_copy_task_end(task, -EAGAIN); - g_free(task); - qemu_co_sleep_ns_wakeable(&call_state->sleep, - QEMU_CLOCK_REALTIME, ns); - continue; - } + if (!call_state->ignore_ratelimit) { + uint64_t ns =3D ratelimit_calculate_delay(&s->rate_limit, 0); + if (ns > 0) { + block_copy_task_end(task, -EAGAIN); + g_free(task); + qemu_co_sleep_ns_wakeable(&call_state->sleep, + QEMU_CLOCK_REALTIME, ns); + continue; } - - ratelimit_calculate_delay(&s->rate_limit, task->bytes); } =20 + ratelimit_calculate_delay(&s->rate_limit, task->bytes); + trace_block_copy_process(s, task->offset); =20 co_get_from_shres(s->mem, task->bytes); @@ -853,10 +850,7 @@ void block_copy_set_skip_unallocated(BlockCopyState *s= , bool skip) =20 void block_copy_set_speed(BlockCopyState *s, uint64_t speed) { - s->speed =3D speed; - if (speed > 0) { - ratelimit_set_speed(&s->rate_limit, speed, BLOCK_COPY_SLICE_TIME); - } + ratelimit_set_speed(&s->rate_limit, speed, BLOCK_COPY_SLICE_TIME); =20 /* * Note: it's good to kick all call states from here, but it should be= done --=20 2.29.2 From nobody Sat May 18 19:12:37 2024 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=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1624626529; cv=pass; d=zohomail.com; s=zohoarc; b=nuW5Zcp4yf84+WqocfmDUbP/5vPROSnH063YI2slAIncbmgrnIVPI7ccvBzO+7FLCBheDTgEe10X7g23OPzTf3xFz9k5DosMNonslFDRRmsiz5TaMXW/n3LnV9DdKYtZNJ6nLLDvrFS+e5zLh+MDccE/E52HBdiaCK+CYS/xM8Y= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624626529; 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=92WIHQRtU57MSN6F4jTY/wP78Ka/Rn9M04Xp2uEV4sc=; b=UzakTzr3t/9uW1r7hQyhazHA9/Pk2EXgcGGFQl/sqBz1YNMCl0rGW37qVX//vxIp6Dp9tKqE/kUmEcJizBfY1VehRP5hCxzxkhafCSDcWweuNc3f4Otq1YyOyYR5aBiNaLgMnbk5i86VjmvfU/FB8BM9C8lO9W38RiBBwu7RyrA= 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=1dmarc=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 1624626529904260.13994767905456; Fri, 25 Jun 2021 06:08:49 -0700 (PDT) Received: from localhost ([::1]:58900 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwlZg-0006Tf-Lm for importer@patchew.org; Fri, 25 Jun 2021 09:08:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43410) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwlRu-0000pT-KD; Fri, 25 Jun 2021 09:00:46 -0400 Received: from mail-vi1eur05on2128.outbound.protection.outlook.com ([40.107.21.128]:11041 helo=EUR05-VI1-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 1lwlRm-0006HJ-JN; Fri, 25 Jun 2021 09:00:46 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM5PR0801MB1652.eurprd08.prod.outlook.com (2603:10a6:203:3c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Fri, 25 Jun 2021 13:00:25 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955%6]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:00:25 +0000 Received: from localhost.localdomain (185.215.60.221) by HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Fri, 25 Jun 2021 13:00:23 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Z3n7jWkPejGr6YFkb47msv04LCr9vE7WkIKu7L4m7oy/wzWtwuCcE4oh76R/e/f1mFJsvaW/fH8D8lJOXafuoVNr05ZMy4Tfi6EaePP3YYwkO+3ziVvFkU/r824hpYRsOMRweHe3Ew18haco5HD5QLzjkoAfDgyGbRy61Que3Psvl7Y8FNoLWD9l2ld5yyc3F8yY4Z7eVtPtGBbB9rxV/Df4ydIdC2HFN+5HYVyYwT5WrsLtReHTQShFN5zVImcPqNo670ZXmnpU7pjk4u3rHLeO5hSauP2i9Xw/Nq4m7M791hX6gAacE8kPxYzTAnlKDGaion73MUKolLikvfdc8Q== 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=92WIHQRtU57MSN6F4jTY/wP78Ka/Rn9M04Xp2uEV4sc=; b=IeknNCbi9M1+0dSBMBJ5wuXwEqoryEz7I/Y5ONbjIGq/WRbI5KoRrk/1f6VabHcKVtoRGEHPB7XuOXKx0L8aYc6j1R9zJGNPPkStRD7Ntk1Ezs5RwY2PLduDZzF3XsW3Rp3gYeP+ktHItpRkwIEU3917astT5j1YHk4Mb6mTCr+UDeO7U/UNAltE659TRr1ssfgMx2XtZicD/BFoAXaDy9yJwEGjouDhEkp5Mr+7VKCCsijqYD1fxN0k/qxonX/YamAehRR84vCW59MftrH4AKY75bc0sECH5v7y9DDfiaFPamiDL9k25cc1ourht/SOwQDLUP6+OksVYHZHb8g0vg== 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=92WIHQRtU57MSN6F4jTY/wP78Ka/Rn9M04Xp2uEV4sc=; b=HYYh5t99UHaLUfxAj8kh/Lq+997xwzTbfVcOeT531ELewBOI7RXAKDVq8ZGRIhJBhXNDmku/tnOIMP68anNNJw+m/uZBP2U6BXS5IIZ84xPGFUNxgHW+aeSVrd6mWDjctok1sUUWTufAfTQlpLfrF1Yp1E4ZjNWoBtb8odN61u8= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com, pbonzini@redhat.com, stefanha@redhat.com, eesposit@redhat.com, peter.maydell@linaro.org Subject: [PULL 03/10] blockjob: let ratelimit handle a speed of 0 Date: Fri, 25 Jun 2021 15:59:59 +0300 Message-Id: <20210625130006.276511-4-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210625130006.276511-1-vsementsov@virtuozzo.com> References: <20210625130006.276511-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.221] X-ClientProxiedBy: HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7edc98f4-6be4-47e0-71ea-08d937d932c6 X-MS-TrafficTypeDiagnostic: AM5PR0801MB1652: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:328; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SJHEhI+2+X9/HBxWua9y+7DPaaVm80LugAn6zYtRC032asHvvZith0mWk09TMi8tBlSyj0xPPiEbG9V1rWex0CTdy6WWWhRJFxsabTYAtQWtDJR3V+iGjoXDnO6vMn81zwiS30YEvjXqP6CShg2Tq0NUqdy1PHB+2h80QErSK5FGkWSdoPi3Sq0IkiG3XEnWMe9VBVqpyNaoWDBrQwhO9P/8FWmdQlRTVcLF1tGEjIe6Mz2MsIQKRKdDPVxAsglXUw4IdPyU195n46WDtq+QQRS98K0TM/e5qjlwYWzIG96pYXPVsk+dWu9CLZ8LLpCZgHQo13tnWwwJoGYdjt3xKmAck0M9b/P76fH7JSl/lEDmFVmxXM3Ur8cid0g6HLFhkQqFa7KekwWGy5ly7g0Wpf7P7Y9xuTexckwuk/DFjZTT8/U8GW9cXxdA90wlQ2xS5CpTfKQu6gRy24pvmNpVZUFLffJEaAHTgmSVuN1Oeu34lA4JCnaa/+LO2zaZZr98rAIzlQN9hCvtZDP3wnw1GZpCfSum2LqpFiZ73eEmsQQBNhTgzXfuP4IUMAHZ421G3Uv6rMVyAbk12kTycdyewBfWU0E0Ail6G+PL9COouEbELfWur3jCZldP6IVFv1JCjVKH2mvvKPmuAkxtLRyDsLw5rgnTSOQA0KI3pZaY/wFXAgGXkq+nYwLNNtEL82cyNTy3LrYLMfP0ibNA0loupUEV7DIMt2n9SKIyF5XQBnyU8yJxN9Pcl1z8tfnIHFQg 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; SFS:(4636009)(39830400003)(346002)(396003)(136003)(366004)(376002)(38100700002)(38350700002)(52116002)(956004)(8676002)(66556008)(2616005)(66476007)(6666004)(2906002)(316002)(8936002)(66946007)(186003)(6506007)(16526019)(26005)(4326008)(478600001)(1076003)(6916009)(6486002)(5660300002)(6512007)(83380400001)(36756003)(86362001)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Z6s7HDHf2vMvzySvABnhBlKnuoKNtXIkWQYm1DEYyPEYuvtadM71+XTuS6yy?= =?us-ascii?Q?Rr0dQH3pkJGKzCQU2giODikZKBaX5/gzV/aoek/AgwTH99CjXs82PcC8ZQPu?= =?us-ascii?Q?tUXTlxDwm/2fyyMzmT/X2PL/qI3z8CBUlU7hefNlZNuFGNday2s2jaIADpIM?= =?us-ascii?Q?61IavDyRtdCnaRM1YHwYzkF2y1N8wrEDGfE5KGG3E4V4r3j5vZ4Ahjgq8jIH?= =?us-ascii?Q?tuIW5Zu/SzBtimpWum3t1rBmDYIPkmo6R0BfL5xKjJE7Tx48aoSrhQ9t9Uv1?= =?us-ascii?Q?1IcxssfSwpmLdPOfjd3/BySFHJpKe1u3CEhbcquiUySW8+4nl3AUAv9BJIF7?= =?us-ascii?Q?fAgxLJU5oN/KUB5VV3HTIKInAk2esY+bDfJNm4xGSwVHfMfl3VbgYoq1+TRI?= =?us-ascii?Q?Kw6lb1esSfqPO99LcyF2Hqcc9gKxFqGLEWS478VeT20brhM6utaoR37brFFp?= =?us-ascii?Q?aWiKmwF6yvmdQfxxzENflTH8YIWabvBe0es8tPM2+cYr/TMJyv6tWzkCVjg6?= =?us-ascii?Q?ADOK+Ptk9t+l74bF7EGImErvBBUR4Eq/xvPAALcW/NLzp/yu9yDL5uCsnQDD?= =?us-ascii?Q?83vLzlEMY6wuaOcBK1E+uAoe7CG0A2nhLhCObwFqz3cDGCzO3ucdFb/HqiAM?= =?us-ascii?Q?Bi/9n59+MVR7S7BK73icO2KGzB9JTVB73M8MFftPg4Yl1GDhcKCMrTJMMgpW?= =?us-ascii?Q?2LAiMyjWE8eVxKLI0olRw3+G3KarMWf8X40syyk+zYHpdRqL/NFOYYaXgDfQ?= =?us-ascii?Q?1WuV9u7CKnHLD/OfTCqv98bvN8yvtGOMRA8u+3gSzVsndej1EZ4bzf0cfAup?= =?us-ascii?Q?xic8xul4z+lMwHtZVFGNvwXt8b8qyiuqV/D9T3NIbYpfV8D0FVhFNP03L6Y7?= =?us-ascii?Q?AD5D9AmIZ14RARLrIUJU1iCPgwGGUOcEEKniXccbMFwf6/APHyeQhhAokmfX?= =?us-ascii?Q?rSNzqjkF2WnjJN1qUKbCZEr0qmvDqW26QaVaOeUtt0rnk476BWbirYFHtBgp?= =?us-ascii?Q?M4RtEuins9mdqc6f/pK0uQWrXbinsAjmq243LXtQe6AAhf8WdBG8EKbq+2w6?= =?us-ascii?Q?qauuPfQ2A62M7Otz+0HdnuGEPtHIGxI0piaztY42jycKBYlJzy31ei2AkKDd?= =?us-ascii?Q?Pnjh4OkkoxfZVxIkgcfhKk3E1Ja7rSMKTmYGkfI3wNqnJ3c9dY1IKFkTLWdS?= =?us-ascii?Q?oXJb5Y2PhqEZgv+Eqpvk+6eLc0iCoEbk40aWFwMgzgKXOrvrSnAu1KrRKSks?= =?us-ascii?Q?BTdv4gbUs7/5UwHnKAvnOpxn/FEqlmFRR3jzc8bHG1u+jO1F7V0mHUPTvjfU?= =?us-ascii?Q?MAgLufruPg1CRrVgDP+X798G?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7edc98f4-6be4-47e0-71ea-08d937d932c6 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2021 13:00:25.0107 (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: nByO9CVnuUbCDHnW4fyUfszEvfGC138cFxagfX1w0uOe7BLC4B8M4FsgpYZf4NNtYMTp+UYxCN1tVeZ41lWjx+IIqR7Qj+SNClrA4aZe5No= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1652 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=40.107.21.128; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini Reviewed-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Paolo Bonzini Signed-off-by: Emanuele Giuseppe Esposito Message-Id: <20210614081130.22134-4-eesposit@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy --- blockjob.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/blockjob.c b/blockjob.c index dc1d9e0e46..22e5bb9b1f 100644 --- a/blockjob.c +++ b/blockjob.c @@ -300,10 +300,6 @@ bool block_job_set_speed(BlockJob *job, int64_t speed,= Error **errp) =20 int64_t block_job_ratelimit_get_delay(BlockJob *job, uint64_t n) { - if (!job->speed) { - return 0; - } - return ratelimit_calculate_delay(&job->limit, n); } =20 @@ -472,12 +468,9 @@ void *block_job_create(const char *job_id, const Block= JobDriver *driver, blk_set_disable_request_queuing(blk, true); blk_set_allow_aio_context_change(blk, true); =20 - /* Only set speed when necessary to avoid NotSupported error */ - if (speed !=3D 0) { - if (!block_job_set_speed(job, speed, errp)) { - job_early_fail(&job->job); - return NULL; - } + if (!block_job_set_speed(job, speed, errp)) { + job_early_fail(&job->job); + return NULL; } =20 return job; --=20 2.29.2 From nobody Sat May 18 19:12:37 2024 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=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1624626390; cv=pass; d=zohomail.com; s=zohoarc; b=FImuAVQIH1yP7yUZJ79y0rdLmEXZGpYcCtNXK7xm7Qx4pK0JujFI1XXUsNQLKlzS4Y/eUM6JgqrwLxJUSPhu64M32Hta0BwUrcuUtsLN6DtN2ibMjQ9jCeyjeBqxhYQ1DdKRoEpOOt37aZINr9DWltVxfBmZDDYXb7hGxjCF5wo= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624626390; 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=Mbg2bCyIaVkT6jKySS9Gpe2DGfcdP/gzwMKALL/E+yg=; b=kBBZtL5aZny/Y/DAWohckdMjEJo4eamE9H/uT9MxaDdpW/CeKQfdG1KVZsFbibGrcIZBwFavdoHS7av1nTw554pu3Kl+RFQEHANnqFzHprnUSy4jtsCJlTUVygJbsN2dwpMp0DfolEOkfmrLZ98+WzyIrEiPh4mzxvTWYpC1x+w= 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=1dmarc=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 1624626390734238.89935507061398; Fri, 25 Jun 2021 06:06:30 -0700 (PDT) Received: from localhost ([::1]:51672 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwlXQ-0001gb-Vj for importer@patchew.org; Fri, 25 Jun 2021 09:06:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43386) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwlRs-0000mK-Nv; Fri, 25 Jun 2021 09:00:44 -0400 Received: from mail-vi1eur05on2132.outbound.protection.outlook.com ([40.107.21.132]:46688 helo=EUR05-VI1-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 1lwlRo-0006Hb-CJ; Fri, 25 Jun 2021 09:00:44 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM5PR0801MB1652.eurprd08.prod.outlook.com (2603:10a6:203:3c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Fri, 25 Jun 2021 13:00:26 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955%6]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:00:26 +0000 Received: from localhost.localdomain (185.215.60.221) by HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Fri, 25 Jun 2021 13:00:25 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Aaa8bcrTo1yV1b/w/IndAEmSzftIAeozUyH18pp/lvv1lMLWrWbjjlJ2ErxmrwzYa9X0o75r7SgWTjD3fxDKsq0Mw2ffqpuQVhpY9cLaAFG0qd309EhZcbYOX8DWKhgf/anP0eSQdEk3niti6rDAz6x/ni4hWQBQKHNjfHcu1Ix2G8pX2U2ZeLo7EISqzmo8FN5MGGj69wna/B7OaiY4Fu6oBekt4r7ObmfRWZEx3i4U4ogW1fRgJa6PeQ4F3hdXFrjPR7WLV48tQ/uihoegmVMAN/T4a2CIggXno2NspUsOxr3rKu8w5DIPdSv1zE6nAbEilT7LNJ0EP71JztwlDw== 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=Mbg2bCyIaVkT6jKySS9Gpe2DGfcdP/gzwMKALL/E+yg=; b=mEqq0hcimULQnfbGkpEakb8E/Z8hMzaMX/3gySxerTyjkZXFnIuHw/5+8+HW5m4ZA9GBWvYsyZW7ANrwHkvlX8B90n4m9/BFruRkcnTNFb3qxIe+p0Ff5D17IMGaV4TvpWZ9Q3vorV364+gVQW2nfCe+jJNtXH1KvbWZw4uZvzv9ybVQb2U0476WCaGGJ1PZzMJeR2TvyHO1g8ECB7Vrp8Uw8QHywfhyM1S81BzRLT8KNj+iF/tAFRR6sDcC0EUbOJm+5JRhwInCMmn398OlcCkdG6kAVFpuKhqe4Y+2Q98kN5KRpDnbs4G2RlaTN1fuZd6gMKL0nubC7MRYAlvAUw== 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=Mbg2bCyIaVkT6jKySS9Gpe2DGfcdP/gzwMKALL/E+yg=; b=eXEjWy7ovwkDiWeBPdFmvhiXZNPZSM6hUNq7PGgTp928RyULc13yC7qOYV+5HwryrOrwPuRQgUDKFUwqZuHXMSEfKqFf6B1LzPirffQk4JjFlso57vXYWlmYtsOuVVLm+f1N7xT0eGxpvxTZb0T04GRJ/ykFl4oXVUaDeUE8c5s= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com, pbonzini@redhat.com, stefanha@redhat.com, eesposit@redhat.com, peter.maydell@linaro.org Subject: [PULL 04/10] progressmeter: protect with a mutex Date: Fri, 25 Jun 2021 16:00:00 +0300 Message-Id: <20210625130006.276511-5-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210625130006.276511-1-vsementsov@virtuozzo.com> References: <20210625130006.276511-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.221] X-ClientProxiedBy: HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2123d608-2da2-4c40-b699-08d937d93385 X-MS-TrafficTypeDiagnostic: AM5PR0801MB1652: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:5797; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9B3rXQYME21BETHw5jyQ8PWdGP4OjEsBCPDwnGbXUVHHdfmjketjWoAN/493MIBQiH90GwJz8cDwM5qmJvYIGSIrhzlt/3Yfsqa2ol+DgYn/sjpQdL2wlvt2S/coNrnj5HZoih9xpI3q8yNAFYMfKMEn2Rh/F0O1leOtcBypZIz/OuFS7J1tATrSIOQnFEwIclUSssF3XKZtCrCr2+vk/GnXO1uZKFPTef3eUjqtNYENFkerqFKw6CwRIgQIKhDLwYhoGurrauy2P+s86a+yxl1X1YHOpNnMpWdKFEroXRdWNhZ8ylfDluebs2yyhGgE+yAH6VAoQ9C4IJzUHF1XHbY9kAb2kONvpRSnU8p2aluMKALUa7A1n7z+3w27ljS2ir7b6I/IowxZBS6s/lQee27UGHxUslDwUFOHi5TX8vCZdcacxiC00spasO4NxIKwfhUY+jZ8vx4RSByGFYltWiUsbmaQ30SPMsS7lgJCiFRl7E6677ghht0ypaGx+myxv6xc5xDjqy9McoxnOOFwzZ3dB6d0nPPY7eo34Di/50VGOoTSWmZvibyDi0jZo1rMVEbVb57ctf8KNdTOYieHF+ttkjyxNTXXNZND8ixFOUgtZ8/Dpq3ZfrnMktOBWPez5Cj9CGupwChIEinO10RGJSf0LctNyLsaqK6p9ovBNcK8dbT/FJesOq7J77WSrmeFYP0z/prDcb22PC6QBmd+7tmKtwEZyUMzj7ifF3bTQI70Yf1ualV0LESb4OsN5qIrFkRg4Hq2R2cuM71jC91c+A== 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; SFS:(4636009)(39830400003)(346002)(396003)(136003)(366004)(376002)(38100700002)(38350700002)(52116002)(956004)(8676002)(66556008)(2616005)(66476007)(6666004)(2906002)(316002)(8936002)(66946007)(186003)(6506007)(16526019)(26005)(4326008)(478600001)(1076003)(6916009)(6486002)(5660300002)(30864003)(6512007)(83380400001)(36756003)(86362001)(69590400013)(309714004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?7LYZXYN+ExcLu3C/UooQF2X9lAWtHNVKhotl8jLctEq7u+kgNim7PkE6NKGr?= =?us-ascii?Q?GijkkpHzJIw7b8jKsdDJmmOUY3jeJ9W7ahjC1h5svoZF9EWmOyTRxfNyhHHt?= =?us-ascii?Q?UiA3bsooDRXl82hx2+ZTSfvX8xcZLFRWM88sqIYYlfMDz4s4Y3V+wspv3+vV?= =?us-ascii?Q?XTuLqWRL36kKbUwdDaCjYN0oioAQkfohz5Joc9WNKXHUOVDCYgxZCqp0dyHn?= =?us-ascii?Q?gsIh0GzZqWMOMS+t5r+30/0/7NpgQ9omBH0+uy7NABNdHYRruxdz8yVhi0Pw?= =?us-ascii?Q?DaRzqna0v/9h3YWE7PEzRACUrhHr6Nce97Lz5JMWAUgppZa1AzXpjAMNiVbU?= =?us-ascii?Q?+/rsVX1zcg9BR0djWqhRfWwgX+aTUnCGDTHqYKP2WADdmXrPqbKDViiporaA?= =?us-ascii?Q?HsRXF0ak2frSWE8l+ASmZxsKidK9493tLOYylGi40cfKgOKBJfDcbw2Lm3oN?= =?us-ascii?Q?pKHMhJ2hIey7YHzbMFfiRrvABDCRjg/r4e68kOIN4nYMbffvdz9xOVKxFJIt?= =?us-ascii?Q?Um7HPDBq6WlgQ1s22HeJ1PD8fHDxaIyUqvEcC2hbUIDPxAbJKmLqedim0Ih0?= =?us-ascii?Q?xJBF1QCwXp7PSD6fo3xeiIqHyfgUw9DIXLgVZq+aKe9zDN6XiPJQifIm4xza?= =?us-ascii?Q?d3rd7pauI2JWgfJuB6PUxrP1qpEvF4nnrQPRXE4VEXZpX7rsrFFegh0xTt8f?= =?us-ascii?Q?8BY3GjlObTkwAwkYaqLseGyoS5zBSt1AUOSETT4lSs1wUoTHTGE8msd1wRz5?= =?us-ascii?Q?vgGpL7j9MMHaUGIX4Op5UiOR6Dq+N3t9dW4TZYrgBNmOzOGLV6w4CIy204hp?= =?us-ascii?Q?FdUCIZkp/gcXH1NJ7mXpevG73yA95WJATAuXc4hZbawIAt9Vdvlddj0Gs49D?= =?us-ascii?Q?DTjOxhRKahEf7HErFblYT71+DuI1o4FxD+nLsLoHF7vN0c6HT+C23bMDRqaW?= =?us-ascii?Q?ELY9t2fuNGXEeNxuodOU0wh3DfnzIun2aSnh7RygWyS7i98XOD6gjfIhqqwE?= =?us-ascii?Q?XWN/POx6EnV/PL9VlF+jGJJNFMgmVBuHbfGKx2CH/J3ugBSpemSu6rhnY6Cy?= =?us-ascii?Q?GdxPshYOdA4jUpjhVvI3Y/ig5gVP8j3+hFUbRIRfiFb1Gi1IJQqI9rMFdCK9?= =?us-ascii?Q?Vmm/EzVMHWN9nCwFIqjW57l4mC6Wif1yASKAQ5IdhTG8QGYGUC0C08aN6tCU?= =?us-ascii?Q?eMlbKfs5Ec6lAtQZBm8j+THSLo+YPgYVazRNMAONjlUUboiS/u1gIPrps1Q2?= =?us-ascii?Q?PAgLD5aBV0hVj1Ng4XWU0OnyTOZaaVH5xZTl7mYzTS+27RUzTnxwB1fAqmeD?= =?us-ascii?Q?fei75l1P3UK+CzR2AzeGz6rD?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2123d608-2da2-4c40-b699-08d937d93385 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2021 13:00:26.3887 (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: 65yfvCkmOY9nzC3o6kgfTUGwgEsWz0zxNb/i5XTYW1VthBPKJ7KDmZzoNi9B4Dh8bqXEcRnf2YcDzrWOUdfmWk769C9i17BiWyIOqigOO0o= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1652 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=40.107.21.132; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Emanuele Giuseppe Esposito Progressmeter is protected by the AioContext mutex, which is taken by the block jobs and their caller (like blockdev). We would like to remove the dependency of block layer code on the AioContext mutex, since most drivers and the core I/O code are already not relying on it. Create a new C file to implement the ProgressMeter API, but keep the struct as public, to avoid forcing allocation on the heap. Also add a mutex to be able to provide an accurate snapshot of the progress values to the caller. Signed-off-by: Emanuele Giuseppe Esposito Reviewed-by: Stefan Hajnoczi Message-Id: <20210614081130.22134-5-eesposit@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/qemu/progress_meter.h | 34 +++++++++++-------- block/progress_meter.c | 64 +++++++++++++++++++++++++++++++++++ blockjob.c | 33 +++++++++++++----- job-qmp.c | 8 +++-- job.c | 3 ++ qemu-img.c | 9 +++-- block/meson.build | 1 + 7 files changed, 124 insertions(+), 28 deletions(-) create mode 100644 block/progress_meter.c diff --git a/include/qemu/progress_meter.h b/include/qemu/progress_meter.h index 9a23ff071c..dadf822bbf 100644 --- a/include/qemu/progress_meter.h +++ b/include/qemu/progress_meter.h @@ -27,6 +27,8 @@ #ifndef QEMU_PROGRESS_METER_H #define QEMU_PROGRESS_METER_H =20 +#include "qemu/lockable.h" + typedef struct ProgressMeter { /** * Current progress. The unit is arbitrary as long as the ratio between @@ -37,22 +39,24 @@ typedef struct ProgressMeter { =20 /** Estimated current value at the completion of the process */ uint64_t total; + + QemuMutex lock; /* protects concurrent access to above fields */ } ProgressMeter; =20 -static inline void progress_work_done(ProgressMeter *pm, uint64_t done) -{ - pm->current +=3D done; -} - -static inline void progress_set_remaining(ProgressMeter *pm, uint64_t rema= ining) -{ - pm->total =3D pm->current + remaining; -} - -static inline void progress_increase_remaining(ProgressMeter *pm, - uint64_t delta) -{ - pm->total +=3D delta; -} +void progress_init(ProgressMeter *pm); +void progress_destroy(ProgressMeter *pm); + +/* Get a snapshot of internal current and total values */ +void progress_get_snapshot(ProgressMeter *pm, uint64_t *current, + uint64_t *total); + +/* Increases the amount of work done so far by @done */ +void progress_work_done(ProgressMeter *pm, uint64_t done); + +/* Sets how much work has to be done to complete to @remaining */ +void progress_set_remaining(ProgressMeter *pm, uint64_t remaining); + +/* Increases the total work to do by @delta */ +void progress_increase_remaining(ProgressMeter *pm, uint64_t delta); =20 #endif /* QEMU_PROGRESS_METER_H */ diff --git a/block/progress_meter.c b/block/progress_meter.c new file mode 100644 index 0000000000..aa2e60248c --- /dev/null +++ b/block/progress_meter.c @@ -0,0 +1,64 @@ +/* + * Helper functionality for some process progress tracking. + * + * Copyright (c) 2011 IBM Corp. + * Copyright (c) 2012, 2018 Red Hat, Inc. + * Copyright (c) 2020 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/progress_meter.h" + +void progress_init(ProgressMeter *pm) +{ + qemu_mutex_init(&pm->lock); +} + +void progress_destroy(ProgressMeter *pm) +{ + qemu_mutex_destroy(&pm->lock); +} + +void progress_get_snapshot(ProgressMeter *pm, uint64_t *current, + uint64_t *total) +{ + QEMU_LOCK_GUARD(&pm->lock); + + *current =3D pm->current; + *total =3D pm->total; +} + +void progress_work_done(ProgressMeter *pm, uint64_t done) +{ + QEMU_LOCK_GUARD(&pm->lock); + pm->current +=3D done; +} + +void progress_set_remaining(ProgressMeter *pm, uint64_t remaining) +{ + QEMU_LOCK_GUARD(&pm->lock); + pm->total =3D pm->current + remaining; +} + +void progress_increase_remaining(ProgressMeter *pm, uint64_t delta) +{ + QEMU_LOCK_GUARD(&pm->lock); + pm->total +=3D delta; +} diff --git a/blockjob.c b/blockjob.c index 22e5bb9b1f..4bad1408cb 100644 --- a/blockjob.c +++ b/blockjob.c @@ -306,18 +306,23 @@ int64_t block_job_ratelimit_get_delay(BlockJob *job, = uint64_t n) BlockJobInfo *block_job_query(BlockJob *job, Error **errp) { BlockJobInfo *info; + uint64_t progress_current, progress_total; =20 if (block_job_is_internal(job)) { error_setg(errp, "Cannot query QEMU internal jobs"); return NULL; } + + progress_get_snapshot(&job->job.progress, &progress_current, + &progress_total); + info =3D g_new0(BlockJobInfo, 1); info->type =3D g_strdup(job_type_str(&job->job)); info->device =3D g_strdup(job->job.id); info->busy =3D qatomic_read(&job->job.busy); info->paused =3D job->job.pause_count > 0; - info->offset =3D job->job.progress.current; - info->len =3D job->job.progress.total; + info->offset =3D progress_current; + info->len =3D progress_total; info->speed =3D job->speed; info->io_status =3D job->iostatus; info->ready =3D job_is_ready(&job->job), @@ -344,15 +349,19 @@ static void block_job_iostatus_set_err(BlockJob *job,= int error) static void block_job_event_cancelled(Notifier *n, void *opaque) { BlockJob *job =3D opaque; + uint64_t progress_current, progress_total; =20 if (block_job_is_internal(job)) { return; } =20 + progress_get_snapshot(&job->job.progress, &progress_current, + &progress_total); + qapi_event_send_block_job_cancelled(job_type(&job->job), job->job.id, - job->job.progress.total, - job->job.progress.current, + progress_total, + progress_current, job->speed); } =20 @@ -360,6 +369,7 @@ static void block_job_event_completed(Notifier *n, void= *opaque) { BlockJob *job =3D opaque; const char *msg =3D NULL; + uint64_t progress_current, progress_total; =20 if (block_job_is_internal(job)) { return; @@ -369,10 +379,13 @@ static void block_job_event_completed(Notifier *n, vo= id *opaque) msg =3D error_get_pretty(job->job.err); } =20 + progress_get_snapshot(&job->job.progress, &progress_current, + &progress_total); + qapi_event_send_block_job_completed(job_type(&job->job), job->job.id, - job->job.progress.total, - job->job.progress.current, + progress_total, + progress_current, job->speed, !!msg, msg); @@ -393,15 +406,19 @@ static void block_job_event_pending(Notifier *n, void= *opaque) static void block_job_event_ready(Notifier *n, void *opaque) { BlockJob *job =3D opaque; + uint64_t progress_current, progress_total; =20 if (block_job_is_internal(job)) { return; } =20 + progress_get_snapshot(&job->job.progress, &progress_current, + &progress_total); + qapi_event_send_block_job_ready(job_type(&job->job), job->job.id, - job->job.progress.total, - job->job.progress.current, + progress_total, + progress_current, job->speed); } =20 diff --git a/job-qmp.c b/job-qmp.c index 34c4da094f..829a28aa70 100644 --- a/job-qmp.c +++ b/job-qmp.c @@ -144,16 +144,20 @@ void qmp_job_dismiss(const char *id, Error **errp) static JobInfo *job_query_single(Job *job, Error **errp) { JobInfo *info; + uint64_t progress_current; + uint64_t progress_total; =20 assert(!job_is_internal(job)); + progress_get_snapshot(&job->progress, &progress_current, + &progress_total); =20 info =3D g_new(JobInfo, 1); *info =3D (JobInfo) { .id =3D g_strdup(job->id), .type =3D job_type(job), .status =3D job->status, - .current_progress =3D job->progress.current, - .total_progress =3D job->progress.total, + .current_progress =3D progress_current, + .total_progress =3D progress_total, .has_error =3D !!job->err, .error =3D job->err ? \ g_strdup(error_get_pretty(job->err)) : NULL, diff --git a/job.c b/job.c index 8775c1803b..e7a5d28854 100644 --- a/job.c +++ b/job.c @@ -339,6 +339,8 @@ void *job_create(const char *job_id, const JobDriver *d= river, JobTxn *txn, job->cb =3D cb; job->opaque =3D opaque; =20 + progress_init(&job->progress); + notifier_list_init(&job->on_finalize_cancelled); notifier_list_init(&job->on_finalize_completed); notifier_list_init(&job->on_pending); @@ -382,6 +384,7 @@ void job_unref(Job *job) =20 QLIST_REMOVE(job, job_list); =20 + progress_destroy(&job->progress); error_free(job->err); g_free(job->id); g_free(job); diff --git a/qemu-img.c b/qemu-img.c index a5993682aa..7956a89965 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -900,6 +900,7 @@ static void common_block_job_cb(void *opaque, int ret) =20 static void run_block_job(BlockJob *job, Error **errp) { + uint64_t progress_current, progress_total; AioContext *aio_context =3D blk_get_aio_context(job->blk); int ret =3D 0; =20 @@ -908,9 +909,11 @@ static void run_block_job(BlockJob *job, Error **errp) do { float progress =3D 0.0f; aio_poll(aio_context, true); - if (job->job.progress.total) { - progress =3D (float)job->job.progress.current / - job->job.progress.total * 100.f; + + progress_get_snapshot(&job->job.progress, &progress_current, + &progress_total); + if (progress_total) { + progress =3D (float)progress_current / progress_total * 100.f; } qemu_progress_print(progress, 0); } while (!job_is_ready(&job->job) && !job_is_completed(&job->job)); diff --git a/block/meson.build b/block/meson.build index 01861e1545..ef1ba3d973 100644 --- a/block/meson.build +++ b/block/meson.build @@ -13,6 +13,7 @@ block_ss.add(files( 'commit.c', 'copy-on-read.c', 'preallocate.c', + 'progress_meter.c', 'create.c', 'crypto.c', 'dirty-bitmap.c', --=20 2.29.2 From nobody Sat May 18 19:12:37 2024 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=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1624626699; cv=pass; d=zohomail.com; s=zohoarc; b=TEXKt+gFQJng/qL7rh4zKgS2vGUQCZWyn+YjsAZwJ8Z0ND49OQwREmACXBx+7DzB5vmpe9H7w776HGMhoHH7j6ybek5hF5Tzih9I6qN2miCWurDzxZU5Fi4T3cfKXZ9nbzz7hTkyOFTuMkuyAiOsK3UFRvjm4VGCCFy1PcJEs0g= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624626699; 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=rEuv41i5zKNzyyehBfDaOTPQukqvsIVGuzZOZf8nv+I=; b=ixxndxxaoetRjoJq5ggIAcDYsm0Qc6oYSXdRRhv8FDapYDo8VmKL/etTfOQPTmVCCw5jVYrEGMTgZeHXmJqNc37aRmOwka3RiNCn4Grb9nQAnIwSKQZDrNx9YZiLDhi1/UZVQ1C/ILpPBWP3QykXSAm6EKgqQtZ8XbrO61YBQRc= 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=1dmarc=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 1624626699351431.8680051597836; Fri, 25 Jun 2021 06:11:39 -0700 (PDT) Received: from localhost ([::1]:37006 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwlcP-0002Sf-VK for importer@patchew.org; Fri, 25 Jun 2021 09:11:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43424) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwlRv-0000tD-S9; Fri, 25 Jun 2021 09:00:47 -0400 Received: from mail-vi1eur05on2132.outbound.protection.outlook.com ([40.107.21.132]:46688 helo=EUR05-VI1-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 1lwlRt-0006Hb-Ch; Fri, 25 Jun 2021 09:00:47 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM5PR0801MB1652.eurprd08.prod.outlook.com (2603:10a6:203:3c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Fri, 25 Jun 2021 13:00:27 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955%6]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:00:27 +0000 Received: from localhost.localdomain (185.215.60.221) by HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Fri, 25 Jun 2021 13:00:26 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ULkZdZyTGZJF1DDfq44qF2f+TqBpNYUeSVvIM9pelmBkV5jjFX1hXzY6r96Vp2UozRk61VViRVTxT2k4y6AKcL3kX/6t3toMezxVelmnw//auW4WAOuu0+1r9cR7YX6vfRxeypjvfK5isgJe9jmJ/GfBzVaN+NYSAtarhW2UEgQ1rE8xiyuXCkZYp3XxOj8K17sKYVy8nrBw6yHASbGxC4OWKaaDGIOnmiC/sQoOrCjC8WsO3kunKgYAshrDVToR4HmWP5Ob9k2dgzFzejkzAT1rdSOxGCxSL8Wdx7Xv+Jsf/OtuzbjjUKrmnrc+sX2hlR0MgCFr0VyZ5hMW/GFzXw== 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=rEuv41i5zKNzyyehBfDaOTPQukqvsIVGuzZOZf8nv+I=; b=VHNIkTzuuJGONedzetXLDI8c3QMKSD/s2B1D5XkUg1lC9xU2ij/di8QKlsV7v1gOhp9em8rMB46n8FO9Fn40vHiXly0WAOp7EA3jS+8urEK0D8CILQgJzIuJYJ2++1kgrm1ackNT3L+ujxwl1gcx6NSjgzejwqa0U0D82XJ4Bu78Rru9OqwmfG3qTAtWaZzZmtYDybZcp6rB3stP9laQkavcuxSFBfvIlkQKFIRPd1GX9biMaOh6SkWEEwss4gaA23+9e/GJq4RQArDBYvNj7/Epd+armxwS+pF4eFENIEIxmYPj/Nq63ULkIf/YxgEXBBBkj5350+Vou4eddDbjDA== 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=rEuv41i5zKNzyyehBfDaOTPQukqvsIVGuzZOZf8nv+I=; b=SnrT1Abaz1c0o4+AYWS44gzLFJ6JTu/7kEatMTyoa4EWc+0MzGKbtXVKzeTxFc7O0/NjTn0eZLy8ycsyI6vgY5SMWr7yHs7dvqJ4OT97hdNv4IHfnI1WTas7iEETNpbzSxzVcpU/2hLva29YL/47QwXbkS9wTYjziOQPo6X8igU= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com, pbonzini@redhat.com, stefanha@redhat.com, eesposit@redhat.com, peter.maydell@linaro.org Subject: [PULL 05/10] co-shared-resource: protect with a mutex Date: Fri, 25 Jun 2021 16:00:01 +0300 Message-Id: <20210625130006.276511-6-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210625130006.276511-1-vsementsov@virtuozzo.com> References: <20210625130006.276511-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.221] X-ClientProxiedBy: HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 14eacf94-4da1-4d04-6d6a-08d937d93458 X-MS-TrafficTypeDiagnostic: AM5PR0801MB1652: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:270; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1otU0TmVqi1jEnsJfjdvqNqRUqwaktGeSLc9DAN0Ga9GiJbt6yid/OQ8LZDE5YGCLoDZPpssGU3GuUKiZLbTPmIEe0mzVAL0Wc10Vkfh0y5W+Hk3RYia64jXKKYnR2MxGfSxspevtcoZCcsiza8dcLG6iCcv15LP/HzpiY+qfdBNhRrxy7iDsvOkSrnWbKXXVzOmcBzW6m9LSmTYjr3n6yfTH/y8vBjkg89TnJHVjhvHbhmTQZUzg35/MKMaAanQBq5i/I4USoBbh2+7XNsDZmzhBwNzhAC49ug/sQq1Bh2NI0sSQcz368MDFfMR0AqMf+vHgn1XkEIS/trsheIPx9/O1ZfzZo3zBADPxl5XQsR9Jnq09yi6wuMMEUdg9aDFCzPOLkwioHU3+rscZzEzHxAlhih1/smWnhfdU68DwpXD2T33yGUuREmQGFCSswDTko4vq6iGiVkwOUaxkx/UzF1OAzFk9/l6abRoUqYFh5Um1RGeeHYUA9PYdwHK/tv0cfzMkav7CgnlWt80xT5iKKc3yJyW20MXVpM1s3MX7EQtVsUn2YwK+g4/smdPyv7GugkYATl5eWTAtIxOQqpYFlHQjj+mXC/uN3kImInFoFCl3h+FmQNmquPTOf4d0KS8I81FQ3NB89Xt2mH2toicJZHpbUQOe6Nfr/gfsA+KchTVcOOnFm7LvM/TiFc1LOdG6OJZcfOQJkouFVJr19JA8XC9rB3fm8C4CS6TXbkTe7M= 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; SFS:(4636009)(39830400003)(346002)(396003)(136003)(366004)(376002)(38100700002)(38350700002)(52116002)(956004)(8676002)(66556008)(2616005)(66476007)(6666004)(2906002)(316002)(8936002)(66946007)(186003)(6506007)(16526019)(26005)(4326008)(478600001)(1076003)(6916009)(6486002)(5660300002)(6512007)(83380400001)(36756003)(86362001)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?Glcae1H95rYfTRG3zypbXOT78zb9fw63o6Bst1IAuipemuUVgCe+9soBtmmw?= =?us-ascii?Q?/9KXkUTtQ/f2V7dzqoyrABYqzzwsFccjbCYkanFQzyvwOY30HHEA6xefTW2t?= =?us-ascii?Q?Sihr+KexpB7AjYgb8zmfnu+VrFCu//arbL8b4mhdgw4oHmrTB8Wr8XZqzdpm?= =?us-ascii?Q?iwBFb4JAIZMt9sMYBcreqQDI5lvGzDwABcS3fXKehHIXIq9n/IifmaGVkNnG?= =?us-ascii?Q?VuNn26/K8QFiTDMHSglrjbfmx2toe/EJ0TWNjQ/hvFailzV1mgEqJN0RL1n4?= =?us-ascii?Q?BJvrUknTjNh0hHnvioEjXyKe1rGDlrtQhN9B8o69KnkcbFVkmeMUvRH7qNYU?= =?us-ascii?Q?qRGWwKj4yH4tTi1hOgugBvRBJCP3dd/3BkE93VK1KZLcc3ZNueICZIbXEZ5v?= =?us-ascii?Q?Jpr3FD6KLhhwO5Yukiodb86Uj0cGku09nV8dSSfnNXjFl2wPDX3TZUwFe1cA?= =?us-ascii?Q?htJratlQfBX6N7mHFV4kv+VtYug4CiqERRuxFIkOCE3e+Lmy+lyHqvFKKqNI?= =?us-ascii?Q?UgNUJ60pyp9F9uUl/lRC4PUN/dmpU/G2H9FzeAM4olzfNJe8FL/giNEMi4at?= =?us-ascii?Q?eId0wWGeNlmk+GycnIn2uKlHAS5u3Zp1h4sVLGLoQ4NQLC5POHWHQgWnI9Ic?= =?us-ascii?Q?m/ysq3AHCc8qohaJNVRRLyPCUJiSZIGJ2WZ2P0dEtqcwwLwXZ3IBwypn7ZXe?= =?us-ascii?Q?VOWRM/6L7TXVhbuz2Os3uDV6+Q2GwdJOOPKbK3G+t9nDrsRkaZMN8IPFkUXx?= =?us-ascii?Q?YSDNg9RAba0UHYE+QO+LzVTFBI26dQ0SBUJD6qjv+8AS3n35O2jEJXmA0ToY?= =?us-ascii?Q?zJ2AjYTsk8hxZz5nYOCiAifnqqDg1byWs/kJiwWg3X/PupKkRPMkwFaC/K92?= =?us-ascii?Q?EJH+NBmKVW5Gqe+og6mKYV4rvzQNMhGS5S2TRCT5mhQQjbG1vPcCLfdb/p4D?= =?us-ascii?Q?3Ka2Q8Msd9E5CXyzgxYg43OzXOMOcS7w5kwB4b/eyNttn9YCIaMOs/TeGxxr?= =?us-ascii?Q?Lun0qWGVktXK4GD/4zQubnQhf+P+q3gQ8JhDpuXkZaeQYRPGfIYZp2to2Azb?= =?us-ascii?Q?5GaUivsJfa7Lw1ugTBsX8M8Oq66Hb6xLg062b+tOkA3u+xuE0VqUXpzQvUvw?= =?us-ascii?Q?nxSDo2w39DDq9Fx5bhZMZ45SNKte9YSZpygx6O9prifkDTBQQKPkNJ5z1rR1?= =?us-ascii?Q?65D/xHBkRDVDkQtHqCTApWIzG0bM3ED2qtSRNu94x8oK4pS39vcZ07O8+NGs?= =?us-ascii?Q?0b0RPB3i0ajS7p0RcyzemM0oJMNviE1WMc4MaryFGIA2MShiLuJajp9AdYMc?= =?us-ascii?Q?5Xq/6JkLb8Aw2xl/IJ5GW1o8?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 14eacf94-4da1-4d04-6d6a-08d937d93458 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2021 13:00:27.6700 (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: ggtQWbhJfH3dgby3oX6nDUgjOjIw1PHHw2rUEUnsqeVmIJbmM8xQkgFQrIsAiwwjrVSikuFF5wKDSZaT/x2aSaOq/VnYmQMntxTagMgshbk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1652 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=40.107.21.132; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Emanuele Giuseppe Esposito co-shared-resource is currently not thread-safe, as also reported in co-shared-resource.h. Add a QemuMutex because co_try_get_from_shres can also be invoked from non-coroutine context. Reviewed-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Emanuele Giuseppe Esposito Message-Id: <20210614081130.22134-6-eesposit@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/qemu/co-shared-resource.h | 4 +--- util/qemu-co-shared-resource.c | 24 +++++++++++++++++++----- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/include/qemu/co-shared-resource.h b/include/qemu/co-shared-res= ource.h index 4e4503004c..78ca5850f8 100644 --- a/include/qemu/co-shared-resource.h +++ b/include/qemu/co-shared-resource.h @@ -26,15 +26,13 @@ #ifndef QEMU_CO_SHARED_RESOURCE_H #define QEMU_CO_SHARED_RESOURCE_H =20 - +/* Accesses to co-shared-resource API are thread-safe */ typedef struct SharedResource SharedResource; =20 /* * Create SharedResource structure * * @total: total amount of some resource to be shared between clients - * - * Note: this API is not thread-safe. */ SharedResource *shres_create(uint64_t total); =20 diff --git a/util/qemu-co-shared-resource.c b/util/qemu-co-shared-resource.c index 1c83cd9d29..a66cc07e75 100644 --- a/util/qemu-co-shared-resource.c +++ b/util/qemu-co-shared-resource.c @@ -28,10 +28,13 @@ #include "qemu/co-shared-resource.h" =20 struct SharedResource { - uint64_t total; - uint64_t available; + uint64_t total; /* Set in shres_create() and not changed anymore */ =20 + /* State fields protected by lock */ + uint64_t available; CoQueue queue; + + QemuMutex lock; }; =20 SharedResource *shres_create(uint64_t total) @@ -40,6 +43,7 @@ SharedResource *shres_create(uint64_t total) =20 s->total =3D s->available =3D total; qemu_co_queue_init(&s->queue); + qemu_mutex_init(&s->lock); =20 return s; } @@ -47,10 +51,12 @@ SharedResource *shres_create(uint64_t total) void shres_destroy(SharedResource *s) { assert(s->available =3D=3D s->total); + qemu_mutex_destroy(&s->lock); g_free(s); } =20 -bool co_try_get_from_shres(SharedResource *s, uint64_t n) +/* Called with lock held. */ +static bool co_try_get_from_shres_locked(SharedResource *s, uint64_t n) { if (s->available >=3D n) { s->available -=3D n; @@ -60,16 +66,24 @@ bool co_try_get_from_shres(SharedResource *s, uint64_t = n) return false; } =20 +bool co_try_get_from_shres(SharedResource *s, uint64_t n) +{ + QEMU_LOCK_GUARD(&s->lock); + return co_try_get_from_shres_locked(s, n); +} + void coroutine_fn co_get_from_shres(SharedResource *s, uint64_t n) { assert(n <=3D s->total); - while (!co_try_get_from_shres(s, n)) { - qemu_co_queue_wait(&s->queue, NULL); + QEMU_LOCK_GUARD(&s->lock); + while (!co_try_get_from_shres_locked(s, n)) { + qemu_co_queue_wait(&s->queue, &s->lock); } } =20 void coroutine_fn co_put_to_shres(SharedResource *s, uint64_t n) { + QEMU_LOCK_GUARD(&s->lock); assert(s->total - s->available >=3D n); s->available +=3D n; qemu_co_queue_restart_all(&s->queue); --=20 2.29.2 From nobody Sat May 18 19:12:37 2024 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=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1624626690; cv=pass; d=zohomail.com; s=zohoarc; b=n2iq+VGtBepYJ6LbOV3TaZK9vRsODe3LfmFy/mxFm6S82tnUa3Ih3K6dS868uydkb5j6QtATJOmczC9sGit5yRbLiGgZDds3DvsNaoErgyROhFFXI0gsI1ElnhlE4qA92JrARuej9aJzCR2Tscd2rv+DXC2w+3wLAil+WQgGth8= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624626690; 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=WkYn9crBhSRnh5jTex1jel3+18jnPEvrao3xXF+yg8I=; b=NTE7LdI2wnCw4CRwFerMoKAYSCVTx5iQlnvLREELh6VKTW1E8HK+ow+ZqPuyVHVnXDpS+VqzzLgsl6YqsGfFmVQxaoRrWJAhMeCk8TRhhK2Oeq1Id3YR2od4mn16ESlgWZsjwhFyhw+3J+Yno4f02gSDFzyImQY175kBDNYdMpI= 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=1dmarc=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 162462669051327.744144085083235; Fri, 25 Jun 2021 06:11:30 -0700 (PDT) Received: from localhost ([::1]:36570 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwlcH-0002AZ-AG for importer@patchew.org; Fri, 25 Jun 2021 09:11:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43454) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwlS0-0000uN-Du; Fri, 25 Jun 2021 09:00:58 -0400 Received: from mail-vi1eur05on2128.outbound.protection.outlook.com ([40.107.21.128]:11041 helo=EUR05-VI1-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 1lwlRv-0006HJ-EC; Fri, 25 Jun 2021 09:00:50 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM5PR0801MB1652.eurprd08.prod.outlook.com (2603:10a6:203:3c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Fri, 25 Jun 2021 13:00:28 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955%6]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:00:28 +0000 Received: from localhost.localdomain (185.215.60.221) by HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Fri, 25 Jun 2021 13:00:27 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SxeY1yrUG9gs852rp3eEGUZBpsvImGErx1FRzxIGDxuAuskhZnLU69hBi9PiKI7rj0hk2K1tdFpLu9cz+K3L65TfBHpXzDQvF42UlAgBvL6r41joASPwIroFEZo8HloKJ4mdxxiS5CKp3swuAgFdp9+BzxijXA+ps5yvN9qyGO1V7YMimT73q0IocV3vmGzj+GoK+aog41Dc6ZwjGyUO3m13SQzPzmlypvJwy+TSKh4//1aSAnTxMu7MciqfZ8nnbyDcz03hlUvx6bZwMx1+Sg/hotQM0DkUsRCeBmOF6zvVwEoRJtzIvQPSSYqGTmAfc3nObACIhE/QpIDiia8OpQ== 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=WkYn9crBhSRnh5jTex1jel3+18jnPEvrao3xXF+yg8I=; b=mIIUCwMVeYESmYhApTw9lpoSn2xcoX2n3bnrKjF3pEgOSO6sKVLGxp7Bov38XfceVzXO1p4XYPynjMaXZHts1YW4lkZYJqjUWun4RCd6vWGMGwg9OHc0dEdvnB+O3oO9vh8AJfyZzjD6BkL8RgIqGuKkYN3V/5lTtVM7evV9rBNtucZnb/Umh6uukEp+w4QAmnFS730Rc6cCjHzK7f9O1USx37Uo+7/ab+YuE8LeesItINzMk4d8OzMWrdhmRIgzVn+HCoZSAqsukOIM0fXdQ3VUfxVkZ3ANS2ukW4TXrIQpTd++k3PM4LB7fDAWVscf2x9cI+vsXMXaP+vWVvSvLw== 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=WkYn9crBhSRnh5jTex1jel3+18jnPEvrao3xXF+yg8I=; b=vDuYoCnkpmL0z45xBg1M1rBi7JBFoa0OnoJNE8q4CQvUimmTybaANF9IgfdDCtQvmUqtgHBUdrjaqs//iz9MrnKsykexqhInfp+Qf2j6JPc04WheP6RyaQoz73+fItWOV8Ds/Z11I+vPRX5Ft0ol4j5r4PwciFJnKKQJKZAtm/Q= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com, pbonzini@redhat.com, stefanha@redhat.com, eesposit@redhat.com, peter.maydell@linaro.org Subject: [PULL 06/10] block-copy: small refactor in block_copy_task_entry and block_copy_common Date: Fri, 25 Jun 2021 16:00:02 +0300 Message-Id: <20210625130006.276511-7-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210625130006.276511-1-vsementsov@virtuozzo.com> References: <20210625130006.276511-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.221] X-ClientProxiedBy: HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0bdfde4e-364b-48eb-4746-08d937d9351a X-MS-TrafficTypeDiagnostic: AM5PR0801MB1652: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:20; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ETwjbZvlTCbRYxut8A5lp1hWjUZdqWU35Hcru/8exVZCXBIGf1s9fak4+624wk/WK0kle0IQp6UnEjfW5FF8CLZcZ2FKxwQd8f8ZZvVXXLBvJBmFF+Z3iYoKMAs9X53Zh0PN7u2a/h5NgFxsQVgAh4VNmOgnpiNi15kvc71B+Kb4ZeQcds0btP9kNzDMMGvQ7xKeHlIcMilPx1GwF8w04DzXPqnOVGXOS9sz7G0ss/D4j9dTyeHZAtvgdzxziwDThrYbUD+2LXIBHWJqSdNlO6AWz1qWejXEUxCbEbdOt5bIXgp9eKRO+hAwinpM87SKo2gfRIm0WmWOlsKdpiMwP6NFuyl/TAuHbCjtMFdVeke5Rpgh53ra37/TZjE6mFc6N/fOMQpBRI5fYDGA8t51oDEeoTVOuuwzhN5uPkeLAnBlSRsANEv+z9VD3224nQQ8SSFl++Y17Ht26lQVmJwIAY54LiPLPoepqjLitqQfWpGhqnjwidTi9p2j/RQdThlLGHf6kosraArnBj27gBvO8v1pHwPC7i+/XSS/UpkW3RRDmMQZhbs7RPMm5o7i7kX3txE3pr1sT7eNpw0WLU8uQIF0CLpLwZc8H4ra0h4ApqveB70cmzIbTU7NHr9T7PiMY9lkX0Ph5Bx0nGNAKv6ZzN2dXzlyTp2XBQvk3UChmeqX3Q45/L1eeykwzQI2robfRCljZqy1AI9DaKJYqNg31xtpPirVWcE1h4Fd87wBoTQ= 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; SFS:(4636009)(39830400003)(346002)(396003)(136003)(366004)(376002)(38100700002)(38350700002)(52116002)(956004)(8676002)(66556008)(2616005)(66476007)(6666004)(2906002)(316002)(8936002)(66946007)(186003)(6506007)(16526019)(26005)(4326008)(478600001)(1076003)(6916009)(6486002)(5660300002)(6512007)(83380400001)(36756003)(86362001)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?DnDewncP+u162K+OVBUWqvxSn2jZJj1yPReSshcH0uWD6JQ8PLySSYxgdkub?= =?us-ascii?Q?hRCV+D0dQWS4AJU5kjIYW6IJe8gycX6rKlBQGk8Y/9mEvwI6pW6XDOKXZ9Cl?= =?us-ascii?Q?DQ+ILIbeGdpAUAXHN/ncHaBEBa28f5QZxugfPbOLU6qh/MH39/3kA2mf+yfr?= =?us-ascii?Q?t3Pi/pt3Gntsd7rt1849E1ZHk3HLn2PWA324oScCDJeCdPL6TQZ58/Rlnw3D?= =?us-ascii?Q?tdxVO0LwJRFMRhuwTuOEgp2ic+XYonuyYmrVX0oSRSlez71X6oQ1iB9vlECk?= =?us-ascii?Q?i/vbF8KrLwr2btUtL/1Wx8dtbnQ7PSv7dmVU8yaW2TlQP5J3bicQFLaKR3sD?= =?us-ascii?Q?M9AIwXr7JJ7oYKXpSvUmHaWuXnqG1V83sOhpQhFClhc+44142CzcIRnmZkoh?= =?us-ascii?Q?3qmlnVfGSlD+MljU6hcXsw5TIUV1BU/oGKRpi6rWIZdX4aMAdNvHuLPMZc8z?= =?us-ascii?Q?51CRGj+j5073d5q96oaQsEbw3Iqu4cxAgd8+V+9jDnddIFKr/5ZBv45mssFy?= =?us-ascii?Q?diIZEgrmlysWM151vRcDrT25tyl1pbwgtcTTEv8aNs/G+OxnYdEXV4WsBHg4?= =?us-ascii?Q?WAviVdSwXiCbxYMgdOqzO7gLIiebW4LGeCcR/b32LtntTxUrTAsaP/Jy8nc3?= =?us-ascii?Q?FrhA5DCdq/5/z8LFYuU5u9J/9/+79ITWokqX+MQRUQc+Rc8yf8zYlxeagkm6?= =?us-ascii?Q?ntXLNfoRyCFcXEF3cBlIlUdNjF9ttoHFnsPMo21DcJm/9bMYPWok842L6GRs?= =?us-ascii?Q?hbgty0STozcT4Y+M30dqe2VuOtln/DqzFw0X+pmmMu6H+fqxSichz3musMqn?= =?us-ascii?Q?9Evb2/Iol2F1NiVIl/pFHSs4aBq7nkmYsvmda+vffzquKiQ0jUgm/0/1lVDN?= =?us-ascii?Q?trPOjLvGtUZ12hxJhx+XxYQwd1SlCqQKvLmh2xqItGFYvBI/zFLSgngZhJjz?= =?us-ascii?Q?yYfXcLTijzuFgxAs8Pua3rviuBfVTHZjfGVQ3HrJgqArVuOV/gcPYhet52m7?= =?us-ascii?Q?Tt64QHoW4g1dvuzX08s8SOW4V6Rg8QmcepLk7/bReoHaD6WVUJdkeCd0ag8a?= =?us-ascii?Q?iBpjxUaAfW1Ug/otpMk7Yo2K1SSeu58/9xw6xkO+jOQydaoa5chVEAfTSVU9?= =?us-ascii?Q?ktTfgMea/EDXw/VkcJVsBUCKaOUehyXz69/vO8JUzkEIX5GAtN4Zj4BKM0aT?= =?us-ascii?Q?AT1W/g1Ez61lqkpUhcsBVl5SPqya5XRoONK5+BUGtrACejkSkLf94zvk+5sC?= =?us-ascii?Q?PQNdQdB4xDOGx43Euj7t/78kf7jWDY5l7cQ/J8RBze5chPzbOTFTVAHYBHf0?= =?us-ascii?Q?Y9ZAWxjw6mhdJ3xkn3RHDYjX?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0bdfde4e-364b-48eb-4746-08d937d9351a X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2021 13:00:28.9106 (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: o4Mpz7thGvtifMB3sGEImMKi8mBR2k1a2/U7/BoJaeqr0y50gAQSrQLvttLI2KNgdJ4r/U5QrUkolrroa6xe6EhGGMVBxKTpzLoOoG4Hvwc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1652 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=40.107.21.128; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Emanuele Giuseppe Esposito Use a local variable instead of referencing BlockCopyState through a BlockCopyCallState or BlockCopyTask every time. This is in preparation for next patches. No functional change intended. Reviewed-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Emanuele Giuseppe Esposito Message-Id: <20210624072043.180494-2-eesposit@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/block-copy.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/block/block-copy.c b/block/block-copy.c index 020f9846d8..a437978e35 100644 --- a/block/block-copy.c +++ b/block/block-copy.c @@ -452,14 +452,15 @@ static void block_copy_handle_copy_range_result(Block= CopyState *s, static coroutine_fn int block_copy_task_entry(AioTask *task) { BlockCopyTask *t =3D container_of(task, BlockCopyTask, task); + BlockCopyState *s =3D t->s; bool error_is_read =3D false; bool copy_range =3D t->copy_range; int ret; =20 - ret =3D block_copy_do_copy(t->s, t->offset, t->bytes, t->zeroes, + ret =3D block_copy_do_copy(s, t->offset, t->bytes, t->zeroes, ©_range, &error_is_read); if (t->copy_range) { - block_copy_handle_copy_range_result(t->s, copy_range); + block_copy_handle_copy_range_result(s, copy_range); } if (ret < 0) { if (!t->call_state->ret) { @@ -467,9 +468,9 @@ static coroutine_fn int block_copy_task_entry(AioTask *= task) t->call_state->error_is_read =3D error_is_read; } } else { - progress_work_done(t->s->progress, t->bytes); + progress_work_done(s->progress, t->bytes); } - co_put_to_shres(t->s->mem, t->bytes); + co_put_to_shres(s->mem, t->bytes); block_copy_task_end(t, ret); =20 return ret; @@ -714,14 +715,15 @@ void block_copy_kick(BlockCopyCallState *call_state) static int coroutine_fn block_copy_common(BlockCopyCallState *call_state) { int ret; + BlockCopyState *s =3D call_state->s; =20 - QLIST_INSERT_HEAD(&call_state->s->calls, call_state, list); + QLIST_INSERT_HEAD(&s->calls, call_state, list); =20 do { ret =3D block_copy_dirty_clusters(call_state); =20 if (ret =3D=3D 0 && !call_state->cancelled) { - ret =3D block_copy_wait_one(call_state->s, call_state->offset, + ret =3D block_copy_wait_one(s, call_state->offset, call_state->bytes); } =20 --=20 2.29.2 From nobody Sat May 18 19:12:37 2024 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=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1624626293; cv=pass; d=zohomail.com; s=zohoarc; b=PWzBFzv8Hx0ohcBhK02fAOIA05C+K5bzbxywIIYj46scr9gVGzCnUutmTb/PT6+VtVKetxxF3qS7KHWDObxv5bzFjI269WVPGTde4ZzcHMVFBDehe71cvY/KEv1FfMMMdyQHHmD7V4iFJEPjxTOAUAhIQ0UCBd6ZkROpM2a7zFE= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624626293; 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=SHF8oUnBI0mTbU4T3yx4Ln+ekOX+8DOwCX7aKrwCIP4=; b=oFOY2/Yxtf/VgXwTUEqdwWLq4pOFeGYK30d9dCgtc6dGxfjk7/UV8PyyCK336O39wD2uO93AJW65oTX6//anT/PZaxViBrHCsKP3jmbYFp+/0HA5M4Xqhtq59VWT6sULRL1pgK0YRHnLD/bNV43DmRjRZDsJxZ1mg1fiyamEXqE= 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=1dmarc=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 1624626293224395.8194650744034; Fri, 25 Jun 2021 06:04:53 -0700 (PDT) Received: from localhost ([::1]:46888 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwlVr-0006jH-KB for importer@patchew.org; Fri, 25 Jun 2021 09:04:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43378) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwlRs-0000lW-FU; Fri, 25 Jun 2021 09:00:44 -0400 Received: from mail-db8eur05on2104.outbound.protection.outlook.com ([40.107.20.104]:54361 helo=EUR05-DB8-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 1lwlRh-0006GP-Tu; Fri, 25 Jun 2021 09:00:43 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB6134.eurprd08.prod.outlook.com (2603:10a6:20b:291::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.23; Fri, 25 Jun 2021 13:00:30 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955%6]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:00:30 +0000 Received: from localhost.localdomain (185.215.60.221) by HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Fri, 25 Jun 2021 13:00:29 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MptH1p26mfTtk9QdhDl7RHsDpFyDRyJRwjWxrtb5MjyFjduDyzZs4eqau2IhHHDZ9yXt+UDDGirR+Ej3sGLl/vFxLQFEdDMMaVfUZLzUPUmD3oix5NK7o3wDkI6tse9tJdAzVxVmDrB1xbK4VrOmBKfCfDPSfP4me70DcOmqTijP2br1Ah76XS3kZcOB1JRXQwZ6NF7d9XKXJIEytzlo7qbt/IDHhgGYsl9D74TVvzrh7Haox0meriT0qQO3Qu8bMh/3/MoXVNDO8WCzcNu8UJM0dJ3DFhuLXPFTGdOp5r+0pcjnWZgjuKAW062DH2ORa+AdkF9ejhpLjHIdti2Z9w== 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=SHF8oUnBI0mTbU4T3yx4Ln+ekOX+8DOwCX7aKrwCIP4=; b=eAFKmqFC3ATMxOPHphlo0y+0HOcW7+V4kZ0Cs/SCyhbA8Aqy28KOsi34GIAe4Xx4huND4ilk2+e5WPPD5oex3rD69erJshWgjQF6NPTGlOVLBTyImEnGVSF+fnxl9UVWFq4DRuIqAQMkENaIXVY7xdDpALqUTfs5E2YwrYegGhyDqcOWIsABMGybSRW3wqCLKzqwebP28alBFfFj3lGoBYoSQtWaBpsCUIvlBt6EQ8PPtXp7R19jdTFpl70nc5ZHA6Z3RBgCbSE4pt+77AtQGkIi6cZyBBPCPcSaISmg2L7KGmR8vMP1eXvoFSQ0xgl5hYMmOPLAqTH+sBlvZXGRIg== 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=SHF8oUnBI0mTbU4T3yx4Ln+ekOX+8DOwCX7aKrwCIP4=; b=MBzj1Bq9mNEz7RQnaUC+Tn8dZJFOD4l3UfFLaHQtGZMo1vgx99qSlK/xZiNgJR/OGNDVjc+wjPz79XwWpC3N2Wcd9HprkTKVjIknFIyUODZhSBdPfEhaFcmj2IWI0yMwbx40Ogu0lXj9Jjn1zgjlq2Fi1F76KRWeN8r/JmjwFYQ= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com, pbonzini@redhat.com, stefanha@redhat.com, eesposit@redhat.com, peter.maydell@linaro.org Subject: [PULL 07/10] block-copy: streamline choice of copy_range vs. read/write Date: Fri, 25 Jun 2021 16:00:03 +0300 Message-Id: <20210625130006.276511-8-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210625130006.276511-1-vsementsov@virtuozzo.com> References: <20210625130006.276511-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.221] X-ClientProxiedBy: HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 6648543e-1eb7-41e7-ecf2-08d937d935d3 X-MS-TrafficTypeDiagnostic: AS8PR08MB6134: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:510; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Bp9QLxv1tqeJ3xdMdv/WhusFUAIcNp4Z4AqP+Lq7u62aJotiRjoiIGkTAzevwFJrqapLtngVSwdHiSYF/OnHh30ZgjRyNV3RlgbDGtqh+qcVwhdpk2ZfXczhQNPeoeXC5vpKa6f2Q9fytEYrg43omFoJYVVfdgkgbE/j83BQ4rWOQzb6BO36GnBNtsUrsBPeBCwkdrx1KorlYjoBOQTZSeN+kUYo3OYB4jmAtCAZp0ARXCI7u0j+QzkCnzFj93mmYO1XOS0QbzTUzUPVGv7jrjHcyiqHSP75m74E8ePmYGvw6dSRNDKImX2HnrWBsIWNP9AbiZMnzXlXGlayaWvcKQzOQ0ikMpvrjjMiPLzOEpgI7d+j5UvlSCBNKCinlHLNV0Pj6c3Tz/b6pMN+ELQHM2jvnR2wnsPZ9Cf/lviJO1YokdnAkw4DqzLq4mSByN7Yj+nMi6lCighf0W9G3evIChzFr2PScKUa7+567b7MGd4exnYoc/2La/HUElu8lJ4NQS4OId3AlMA9KrNAqvXdXEdHr6Evts+7U5srAkIS3BeSAY3gcki6nVpwvfjvgZBD8qUTEYJF9eWwGuEDRNhv/8iVTAQM7OZNdmLUVqKDZ5GdpZ4oRewWuW/UvONO9Jz5WOUlCt3F5NQUM0sFdl2FOag8J83fShmKzJpI3+O1vOrrLb9G6RnqGEsvnqoI3GCA 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; SFS:(4636009)(376002)(346002)(396003)(366004)(136003)(39840400004)(6916009)(6666004)(66556008)(66476007)(2906002)(66946007)(956004)(8936002)(16526019)(8676002)(6506007)(6512007)(26005)(478600001)(2616005)(38350700002)(38100700002)(6486002)(316002)(83380400001)(86362001)(36756003)(5660300002)(30864003)(1076003)(186003)(4326008)(52116002)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YCA1mDrrPnEHMVaOn2RWookqpZgBk1AUf3Nn7mwO1mXHwGIG3bYkaFGCqXzI?= =?us-ascii?Q?j+y/7vlQ8n4FBe4A049axZkHoSM0E3UyoXFFfDC1rvaMNf9uY1xlFLAWL2Jr?= =?us-ascii?Q?fVcn0/HtDi4umbJhh4chdYnUXmaZ1lucuEAb0QKFXDb7rq8x//PIbkEkJ0OA?= =?us-ascii?Q?GWYN1r1EOCAQoJA5uiNuMrAjztmwS9mflJ4XFdK0FKWHg6duwYS/UO0gxD2N?= =?us-ascii?Q?bs11SGrkaMVPJuR8jQ4NgHBMoua7mWW4vKExz69/slpvhpx/LxAsHvqhSYFm?= =?us-ascii?Q?zeOwf2OPy4fqdD4On0u3tJrDa6C1QXeBWYjo6G+q2P1OEVnjp4n7RnZ1vLWw?= =?us-ascii?Q?swhsAmYs6AvMqAj54CROD7mevrfPmqvuTAzFWvyKUXM8kAvBuycQopZR0Bus?= =?us-ascii?Q?U5wi16CWvApGUJHkoFDFjKVKdrWC8QFylJCpC1wynzLpPXAvdlLAdphq07Mi?= =?us-ascii?Q?wCnvAGpESkkCO8bQh5qQaWKyvjflcKZ5TvEVIEDMbL1CfDp0TgpOtINgIZCp?= =?us-ascii?Q?J1cy5XrkFXTBD5/D72suLioxQ2pmA5+eb23uRjIqlzftUJz9etLigjlh3U2+?= =?us-ascii?Q?Y3RE7sMsWU8yJQn9GJz3A4tcUY1aqlmDxAzqOPW1NF35mzEu9iCg77tHUqHU?= =?us-ascii?Q?w0nzd7CCJIpFBA09T9MqdodVUgZrzCaGdN3pyGiXtM6Ky+cTWB0hZtSutAnS?= =?us-ascii?Q?92o3+88FnaU59j+1zuUG5EBjrGrLZ4VFN9esYSs6v+pPx5Za+/Dy9PPdDjmG?= =?us-ascii?Q?AyfwPBRmDAYgYDcGwWXlw2kmxl2HlyINxcoQemUNx4wij3i/t7BwRP3fdbpO?= =?us-ascii?Q?rNQWJsPhVby58Q4eEVD2FGgLqFo7EMsZaVRDuznhPCPT9AV1+35mUO8HALZx?= =?us-ascii?Q?78wZMcFXeAWWTdXhvd0lzPzqsRB+4TAaMVSheXB7e1PdwfnOubIdL+ej67pm?= =?us-ascii?Q?MKveKOfiMpLaydcxS9gatYc9vxeLPKceYNMrxBuB75oPRAoIoVmtjypuW2ko?= =?us-ascii?Q?MTUQgj+BbGFMUQn+6WCO5TW6y8k0bt6C8oBlJv/IGIVMQjrbFKYyS5CK53WM?= =?us-ascii?Q?aHwc03XkqXGZrzBNzBxNxtc6fEnvUqy/ij7b+BE8riBwlrElC6k84T2A29Kf?= =?us-ascii?Q?HJod6WjdMYq+/nDRwRD75R7onFvLk4ycbSEGDPpDo95+dDRySIQrPUuXkRYt?= =?us-ascii?Q?ljNcI5MgcRTOVIdVX76TsnSbGfPRgCO15KEidxkSYCQtPD2CIuVgzTVJZThB?= =?us-ascii?Q?FJR/EbUyLf4Ra0p6mHmvxI1y3mx9WVSOBf/HIJtJw5QBLxAgFXT9hX1uprK5?= =?us-ascii?Q?sM/v5Yl5nTsZ5bfWbPNVu7BP?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6648543e-1eb7-41e7-ecf2-08d937d935d3 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2021 13:00:30.1382 (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: gBlnl+zIiYMPl7fN6G0k81FsFNgxVtFKkz8RtTdJh1fquh/HlUWn7mpszF3Z5/s7x4Dlr2KkBHtu2GQnONEGEGT8jM1xmYVzxRTXNJW5Jqc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6134 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=40.107.20.104; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Paolo Bonzini Put the logic to determine the copy size in a separate function, so that there is a simple state machine for the possible methods of copying data from one BlockDriverState to the other. Use .method instead of .copy_range as in-out argument, and include also .zeroes as an additional copy method. While at it, store the common computation of block_copy_max_transfer into a new field of BlockCopyState, and make sure that we always obey max_transfer; that's more efficient even for the COPY_RANGE_READ_WRITE case. Reviewed-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Emanuele Giuseppe Esposito Signed-off-by: Paolo Bonzini Message-Id: <20210624072043.180494-3-eesposit@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/block-copy.c | 176 +++++++++++++++++++++++---------------------- 1 file changed, 90 insertions(+), 86 deletions(-) diff --git a/block/block-copy.c b/block/block-copy.c index a437978e35..0a1cf3d0cb 100644 --- a/block/block-copy.c +++ b/block/block-copy.c @@ -28,6 +28,14 @@ #define BLOCK_COPY_MAX_WORKERS 64 #define BLOCK_COPY_SLICE_TIME 100000000ULL /* ns */ =20 +typedef enum { + COPY_READ_WRITE_CLUSTER, + COPY_READ_WRITE, + COPY_WRITE_ZEROES, + COPY_RANGE_SMALL, + COPY_RANGE_FULL +} BlockCopyMethod; + static coroutine_fn int block_copy_task_entry(AioTask *task); =20 typedef struct BlockCopyCallState { @@ -64,8 +72,7 @@ typedef struct BlockCopyTask { BlockCopyCallState *call_state; int64_t offset; int64_t bytes; - bool zeroes; - bool copy_range; + BlockCopyMethod method; QLIST_ENTRY(BlockCopyTask) list; CoQueue wait_queue; /* coroutines blocked on this task */ } BlockCopyTask; @@ -86,8 +93,8 @@ typedef struct BlockCopyState { BdrvDirtyBitmap *copy_bitmap; int64_t in_flight_bytes; int64_t cluster_size; - bool use_copy_range; - int64_t copy_size; + BlockCopyMethod method; + int64_t max_transfer; uint64_t len; QLIST_HEAD(, BlockCopyTask) tasks; /* All tasks from all block-copy ca= lls */ QLIST_HEAD(, BlockCopyCallState) calls; @@ -149,6 +156,24 @@ static bool coroutine_fn block_copy_wait_one(BlockCopy= State *s, int64_t offset, return true; } =20 +static int64_t block_copy_chunk_size(BlockCopyState *s) +{ + switch (s->method) { + case COPY_READ_WRITE_CLUSTER: + return s->cluster_size; + case COPY_READ_WRITE: + case COPY_RANGE_SMALL: + return MIN(MAX(s->cluster_size, BLOCK_COPY_MAX_BUFFER), + s->max_transfer); + case COPY_RANGE_FULL: + return MIN(MAX(s->cluster_size, BLOCK_COPY_MAX_COPY_RANGE), + s->max_transfer); + default: + /* Cannot have COPY_WRITE_ZEROES here. */ + abort(); + } +} + /* * Search for the first dirty area in offset/bytes range and create task at * the beginning of it. @@ -158,8 +183,9 @@ static BlockCopyTask *block_copy_task_create(BlockCopyS= tate *s, int64_t offset, int64_t bytes) { BlockCopyTask *task; - int64_t max_chunk =3D MIN_NON_ZERO(s->copy_size, call_state->max_chunk= ); + int64_t max_chunk; =20 + max_chunk =3D MIN_NON_ZERO(block_copy_chunk_size(s), call_state->max_c= hunk); if (!bdrv_dirty_bitmap_next_dirty_area(s->copy_bitmap, offset, offset + bytes, max_chunk, &offset, &bytes)) @@ -183,7 +209,7 @@ static BlockCopyTask *block_copy_task_create(BlockCopyS= tate *s, .call_state =3D call_state, .offset =3D offset, .bytes =3D bytes, - .copy_range =3D s->use_copy_range, + .method =3D s->method, }; qemu_co_queue_init(&task->wait_queue); QLIST_INSERT_HEAD(&s->tasks, task, list); @@ -267,28 +293,28 @@ BlockCopyState *block_copy_state_new(BdrvChild *sourc= e, BdrvChild *target, .len =3D bdrv_dirty_bitmap_size(copy_bitmap), .write_flags =3D write_flags, .mem =3D shres_create(BLOCK_COPY_MAX_MEM), + .max_transfer =3D QEMU_ALIGN_DOWN( + block_copy_max_transfer(source, target= ), + cluster_size), }; =20 - if (block_copy_max_transfer(source, target) < cluster_size) { + if (s->max_transfer < cluster_size) { /* * copy_range does not respect max_transfer. We don't want to both= er * with requests smaller than block-copy cluster size, so fallback= to * buffered copying (read and write respect max_transfer on their * behalf). */ - s->use_copy_range =3D false; - s->copy_size =3D cluster_size; + s->method =3D COPY_READ_WRITE_CLUSTER; } else if (write_flags & BDRV_REQ_WRITE_COMPRESSED) { /* Compression supports only cluster-size writes and no copy-range= . */ - s->use_copy_range =3D false; - s->copy_size =3D cluster_size; + s->method =3D COPY_READ_WRITE_CLUSTER; } else { /* - * We enable copy-range, but keep small copy_size, until first + * If copy range enabled, start with COPY_RANGE_SMALL, until first * successful copy_range (look at block_copy_do_copy). */ - s->use_copy_range =3D use_copy_range; - s->copy_size =3D MAX(s->cluster_size, BLOCK_COPY_MAX_BUFFER); + s->method =3D use_copy_range ? COPY_RANGE_SMALL : COPY_READ_WRITE; } =20 ratelimit_init(&s->rate_limit); @@ -343,17 +369,14 @@ static coroutine_fn int block_copy_task_run(AioTaskPo= ol *pool, * * No sync here: nor bitmap neighter intersecting requests handling, only = copy. * - * @copy_range is an in-out argument: if *copy_range is false, copy_range = is not - * done. If *copy_range is true, copy_range is attempted. If the copy_range - * attempt fails, the function falls back to the usual read+write and - * *copy_range is set to false. *copy_range and zeroes must not be true - * simultaneously. - * + * @method is an in-out argument, so that copy_range can be either extende= d to + * a full-size buffer or disabled if the copy_range attempt fails. The ou= tput + * value of @method should be used for subsequent tasks. * Returns 0 on success. */ static int coroutine_fn block_copy_do_copy(BlockCopyState *s, int64_t offset, int64_t bytes, - bool zeroes, bool *copy_range, + BlockCopyMethod *method, bool *error_is_read) { int ret; @@ -367,9 +390,9 @@ static int coroutine_fn block_copy_do_copy(BlockCopySta= te *s, assert(offset + bytes <=3D s->len || offset + bytes =3D=3D QEMU_ALIGN_UP(s->len, s->cluster_size)); assert(nbytes < INT_MAX); - assert(!(*copy_range && zeroes)); =20 - if (zeroes) { + switch (*method) { + case COPY_WRITE_ZEROES: ret =3D bdrv_co_pwrite_zeroes(s->target, offset, nbytes, s->write_= flags & ~BDRV_REQ_WRITE_COMPRESSED); if (ret < 0) { @@ -377,76 +400,59 @@ static int coroutine_fn block_copy_do_copy(BlockCopyS= tate *s, *error_is_read =3D false; } return ret; - } =20 - if (*copy_range) { + case COPY_RANGE_SMALL: + case COPY_RANGE_FULL: ret =3D bdrv_co_copy_range(s->source, offset, s->target, offset, n= bytes, 0, s->write_flags); - if (ret < 0) { - trace_block_copy_copy_range_fail(s, offset, ret); - *copy_range =3D false; - /* Fallback to read+write with allocated buffer */ - } else { + if (ret >=3D 0) { + /* Successful copy-range, increase chunk size. */ + *method =3D COPY_RANGE_FULL; return 0; } - } =20 - /* - * In case of failed copy_range request above, we may proceed with buf= fered - * request larger than BLOCK_COPY_MAX_BUFFER. Still, further requests = will - * be properly limited, so don't care too much. Moreover the most like= ly - * case (copy_range is unsupported for the configuration, so the very = first - * copy_range request fails) is handled by setting large copy_size only - * after first successful copy_range. - */ + trace_block_copy_copy_range_fail(s, offset, ret); + *method =3D COPY_READ_WRITE; + /* Fall through to read+write with allocated buffer */ =20 - bounce_buffer =3D qemu_blockalign(s->source->bs, nbytes); + case COPY_READ_WRITE_CLUSTER: + case COPY_READ_WRITE: + /* + * In case of failed copy_range request above, we may proceed with + * buffered request larger than BLOCK_COPY_MAX_BUFFER. + * Still, further requests will be properly limited, so don't care= too + * much. Moreover the most likely case (copy_range is unsupported = for + * the configuration, so the very first copy_range request fails) + * is handled by setting large copy_size only after first successf= ul + * copy_range. + */ =20 - ret =3D bdrv_co_pread(s->source, offset, nbytes, bounce_buffer, 0); - if (ret < 0) { - trace_block_copy_read_fail(s, offset, ret); - *error_is_read =3D true; - goto out; - } + bounce_buffer =3D qemu_blockalign(s->source->bs, nbytes); =20 - ret =3D bdrv_co_pwrite(s->target, offset, nbytes, bounce_buffer, - s->write_flags); - if (ret < 0) { - trace_block_copy_write_fail(s, offset, ret); - *error_is_read =3D false; - goto out; - } + ret =3D bdrv_co_pread(s->source, offset, nbytes, bounce_buffer, 0); + if (ret < 0) { + trace_block_copy_read_fail(s, offset, ret); + *error_is_read =3D true; + goto out; + } =20 -out: - qemu_vfree(bounce_buffer); + ret =3D bdrv_co_pwrite(s->target, offset, nbytes, bounce_buffer, + s->write_flags); + if (ret < 0) { + trace_block_copy_write_fail(s, offset, ret); + *error_is_read =3D false; + goto out; + } =20 - return ret; -} + out: + qemu_vfree(bounce_buffer); + break; =20 -static void block_copy_handle_copy_range_result(BlockCopyState *s, - bool is_success) -{ - if (!s->use_copy_range) { - /* already disabled */ - return; + default: + abort(); } =20 - if (is_success) { - /* - * Successful copy-range. Now increase copy_size. copy_range - * does not respect max_transfer (it's a TODO), so we factor - * that in here. - */ - s->copy_size =3D - MIN(MAX(s->cluster_size, BLOCK_COPY_MAX_COPY_RANGE), - QEMU_ALIGN_DOWN(block_copy_max_transfer(s->source, - s->target), - s->cluster_size)); - } else { - /* Copy-range failed, disable it. */ - s->use_copy_range =3D false; - s->copy_size =3D MAX(s->cluster_size, BLOCK_COPY_MAX_BUFFER); - } + return ret; } =20 static coroutine_fn int block_copy_task_entry(AioTask *task) @@ -454,13 +460,12 @@ static coroutine_fn int block_copy_task_entry(AioTask= *task) BlockCopyTask *t =3D container_of(task, BlockCopyTask, task); BlockCopyState *s =3D t->s; bool error_is_read =3D false; - bool copy_range =3D t->copy_range; + BlockCopyMethod method =3D t->method; int ret; =20 - ret =3D block_copy_do_copy(s, t->offset, t->bytes, t->zeroes, - ©_range, &error_is_read); - if (t->copy_range) { - block_copy_handle_copy_range_result(s, copy_range); + ret =3D block_copy_do_copy(s, t->offset, t->bytes, &method, &error_is_= read); + if (s->method =3D=3D t->method) { + s->method =3D method; } if (ret < 0) { if (!t->call_state->ret) { @@ -643,8 +648,7 @@ block_copy_dirty_clusters(BlockCopyCallState *call_stat= e) continue; } if (ret & BDRV_BLOCK_ZERO) { - task->zeroes =3D true; - task->copy_range =3D false; + task->method =3D COPY_WRITE_ZEROES; } =20 if (!call_state->ignore_ratelimit) { --=20 2.29.2 From nobody Sat May 18 19:12:37 2024 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=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1624626514; cv=pass; d=zohomail.com; s=zohoarc; b=TKu5LkbT4aeiFfOk8DSTwssutapUa7TTi7gifALk6dbPi47EwrlcWgz4TxAmM/nDJoTMS3M20Wl5//o2mUrYPryc+jslUd8PWQJoPHOezwzJriwsixzVeXIUcBHBxZVxKNpYxlfwzMRkNtbWl4k3KJhT6bMJwnp+YxeDvHOOt+k= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624626514; 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=P5xss1+ErG+naD7Rbxlp/o1CiHhLkK4VbTTYcisYEg8=; b=kTBDEfM3V6GqH28Q2nUDcNfXf59B988mUDaprf//b0fBqRe+x/84wWzjAsdwyG5qRE+VUZlR9BKcf7jWG5kfFxCYCUbsDu09GVE06OO4BmBQRE+bZbAKpWzMtTIe3f5V4W+39flMzC8wkvhilsdj6ReU45GdvIpYpYk+v7WiehM= 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=1dmarc=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 1624626514981636.4175053585195; Fri, 25 Jun 2021 06:08:34 -0700 (PDT) Received: from localhost ([::1]:58200 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwlZR-00061T-Ew for importer@patchew.org; Fri, 25 Jun 2021 09:08:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43420) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwlRv-0000sN-JP; Fri, 25 Jun 2021 09:00:47 -0400 Received: from mail-db8eur05on2104.outbound.protection.outlook.com ([40.107.20.104]:54361 helo=EUR05-DB8-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 1lwlRt-0006GP-3R; Fri, 25 Jun 2021 09:00:47 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB6134.eurprd08.prod.outlook.com (2603:10a6:20b:291::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.23; Fri, 25 Jun 2021 13:00:31 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955%6]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:00:31 +0000 Received: from localhost.localdomain (185.215.60.221) by HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Fri, 25 Jun 2021 13:00:30 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Nk2kASeQM6RZQxHhuQOGNzCfDkN0dbbSxT9kGZVlxUf4REx5wDRvf4Ezrkiq15V6WyovEUEP8iw7mqgCMRwwyh0LKZNtPqQnWczNSmWaThWg8bJlEyA6VgaOYn/Zhb1aRaIjBgHQzs0pEUodSl/l9dF7ptwYYy4Wlruw2iVjCaWs1nbRAxq9zRVej/sI1HeXta1QrLTRWnQcnO//zKyi0uYD1FbG+7evrXvzkUhlkGlCcGFE1Ay1P3bTbAh1TYHbmV+toq9T6tQYyQqzZbD0nHXkhvbaDf9RgoCPJK4nxvB/lNpLzOtZlx5Pz/7JO/8pTfBuIVbAV/MzM8paBlB6nA== 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=P5xss1+ErG+naD7Rbxlp/o1CiHhLkK4VbTTYcisYEg8=; b=VLJC2CL0NIjf+imRm22z+Sf9Humqzy//6zUDjZhMZlqnlyfzlce8eJksTrHQ4tojGkkvR0dbaYSBhnd9YsDA3O70G10noY1zNYfdRGnESfT+VOdWNck0OB7+ko3/0RF+mwM8fcF5GUVUBKOfYpPa232e71GftGvGHtm5mp2EguRfUryk1Oz2rqo9wcxsoWexRg+EqsL6fPRcUobJMwfQByscvHjsKt4IsJvnKDwOjjK7Rh4xEQH1nDTg9XgPbJAA0Blq4Ui/m8wr5y19ldrJsD0fKM/i65FFSxpZVuSImvkJpB7o9s363vtA2DkmO6SCKJFPMcSBB2EPiSsVbayt7w== 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=P5xss1+ErG+naD7Rbxlp/o1CiHhLkK4VbTTYcisYEg8=; b=s5b6aSO0C40/KhEmGWt/Xe2me2cn8tzNKhzU7l+hsMjvZJdNaBbhTu+5jsB5GaRYpHOukqPrdCSLPpYi/V9/WO0Z9xjFOboU3bLtL04z5lmE3W5vQiqcsTCQA8ZdjyMEgt2a7pSQE8lq0Q2lvvwEdQ1l5I1HEbhjrqt+QrqYnR4= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com, pbonzini@redhat.com, stefanha@redhat.com, eesposit@redhat.com, peter.maydell@linaro.org Subject: [PULL 08/10] block-copy: move progress_set_remaining in block_copy_task_end Date: Fri, 25 Jun 2021 16:00:04 +0300 Message-Id: <20210625130006.276511-9-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210625130006.276511-1-vsementsov@virtuozzo.com> References: <20210625130006.276511-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.221] X-ClientProxiedBy: HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9b346bd4-742e-4fe6-7906-08d937d93695 X-MS-TrafficTypeDiagnostic: AS8PR08MB6134: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:58; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: vmHC9Z5+ZLM4t6zwR9AbBJH0FYFYl4Imrz6gU6bQEJcQkRFHjHplmt4fDEk5uKp4TI710FMPmN4boolC88mmtf8uvF3I5YWrF0AsITQKxXPj5RT0thk1/S6Xz7Kef9KeeNFicyHAuwVYtpTrXxvPPWpyUernx6f989JS5lFqM8TfmwbQWX381kNQN5mKII6yxomlmOu+fQDBTDyv84poOFxrFHH2Ec48TrQcV592NQc5VC9n+NJSIY9Ww+6lPu5ALUkOy9V+iGQixHDsGykKWfnrBP8uuGXRRnxi/PPzKyyAIwNl8DQQDli2ifhI4NPVoOoBcWREtnakoRqB/xcNCJbgtCb0rCatHclsjJ6gr/EllkEDv2D3/aaDyrI+AilaeQS08P3GVSFcXmNDAmJtFEtgqkYFNOzcvrPHikz0oNKLk2ue9DKekhxf0oIJC2e1bunrUat0RqgXvhFugDAOiPC4gEGdx397OfQ/2d8LA6DO3PvKUCyThcpYP7V+7188lmoCKs4/Nxjx6MA17CdrUtKBPe7H05f7sm56+KRTNTsLs33QdWVMbbG2D3JAPQrdUKwA3ztBrCeUhVJwDLZeFUAEWBTfM3K7Xr9ZEZDo31gzzbhXDdtxwe1TCDvKsQ+s/bdK74xYwsvy0wWpvsNd0s7kzf9ibghK94+70mIfhmRP8J0fAMrlycGvCZxDEM2f 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; SFS:(4636009)(376002)(346002)(396003)(366004)(136003)(39840400004)(6916009)(6666004)(66556008)(66476007)(2906002)(66946007)(956004)(8936002)(16526019)(8676002)(6506007)(6512007)(26005)(478600001)(2616005)(38350700002)(38100700002)(6486002)(316002)(83380400001)(86362001)(36756003)(5660300002)(1076003)(186003)(4326008)(52116002)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?C+DCxIPkwy325tFCdSePRIwSkNVA7WQ7b3j2x8W//SQq/zsB/w65YEc40IE0?= =?us-ascii?Q?3AXWiPb+VhdvE7xhT003UKlILpIRsvox5nzva5xIKtfIC1klYYt97mPlYXsn?= =?us-ascii?Q?JHQkCSJcbTbvtJ+hirL8uos6okerd8enJGlFEXEZhTGjifW5lxPBApfccFCj?= =?us-ascii?Q?Kzg5SP7uQylZ00/aqHCubixyZlWUAqvmD1aK15LgaTkhMfqQoupkU3+URtmf?= =?us-ascii?Q?qavW8qArgA4fQeXbFl0gXJ6gjT19vSMxGJaBlPZHp0go8RdCZ63BRHSwkpza?= =?us-ascii?Q?3xvF/zSbEjwIsJoXOLMMLA11yX92atPyIjV4UndhBIlVd0Po8NMvXRUIaQw0?= =?us-ascii?Q?p2rRoKBbXbx7KJ2U8kyjEIqyutsqncsXShaNjiPRRxuL7/vemubKak2zKP/1?= =?us-ascii?Q?DjdVOAIqK1QUbfwP32cKzhO5SVmKqc5jj1cKXowvSsK3P6amK1IonmRU3568?= =?us-ascii?Q?7yqtOFx5gofKK3w9JgBIO7FCh7Bx6xhGa/GFiC2mfAyvYlMwpNYUz1s1eUIa?= =?us-ascii?Q?K9WrQQvDkv5rb6GlecSQNn0B934N4s+y/5mEeAxA8jNsVKWvc18NfqaCKupe?= =?us-ascii?Q?AfHdrVqeXIiiSNmULqplKnu6pINYfLY8duyWh95x9v2U/A5jeWtHmoc3PzVo?= =?us-ascii?Q?dKDx9bBM7oMYGV4gYuJ6/oRmjZ0I0vPHQV8RMB+VzXK7836XcN3I6L/vF0Jk?= =?us-ascii?Q?AphmSTd4kUgCbH6nC1dpkLCWZMbxtmv3xquS+h9gR3ljMCw/ACsAgEMXJEq2?= =?us-ascii?Q?nz4M3SwMlT/PX/AgNtmMMFV/mus0aXYFHu3u5wOMkQO4USVRdgtlVnQZ9QZb?= =?us-ascii?Q?1ag0EtGq8DWAUrRnvoLsfVgzowbDCfvoO67B3mdZWQ5GQZ2clbSJTtZhSZ+J?= =?us-ascii?Q?CJZGvsCyFBplRYHwntoAWwaHtb3yz/TsROVojaYLF1zG8hAOKqmA/VmaC/x+?= =?us-ascii?Q?JYDNNJh1KqSfSReoHU9VS9frkZTsOzdIoWXTFMXyp+8qeMtW3CIWL0vpk0PB?= =?us-ascii?Q?mLbcWvk1f1yXQ7+7a+yIdbsnZS/XXJbVOEvFA+LPdeCMP93yw5QxMXUfXNcD?= =?us-ascii?Q?KCCNqb6tzj6P2TUGeJZ/ZQwx4LEpuI9+B94x1W84U1kECDHrTX4irTFRRAsI?= =?us-ascii?Q?ZpO5e9ohtLAGbzpommznwIzG/VfLPSJiWxEJSWZPnqb/uf2QjLGCcc84SdiW?= =?us-ascii?Q?LZWv/onE2Q4oQzHAzPpYQEktf67BQXp2IVCdAnEBWIU8383OSljh1Yk47cvb?= =?us-ascii?Q?tHCUg0v7DWuMMyhwzxSdWJgJANc83doL8l2I5Evhzt6BNy3ELUqDs992VSvO?= =?us-ascii?Q?5hWZCCA1F4SQqZtaT4vuSrJl?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9b346bd4-742e-4fe6-7906-08d937d93695 X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2021 13:00:31.5271 (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: /EvYzkgnnVatACA2Ugc/PdzytKQ2Cd1ime2NRG0jBiUyPi+PTLAdEFq+GWdV/lJUrEqqEWaaSN/pfO9TWxVu0IhCGbHEeuFsMMFIBiup9dQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6134 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=40.107.20.104; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Emanuele Giuseppe Esposito Moving this function in task_end ensures to update the progress anyways, even if there is an error. It also helps in next patch, allowing task_end to have only one critical section. Reviewed-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Emanuele Giuseppe Esposito Message-Id: <20210624072043.180494-4-eesposit@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/block-copy.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/block/block-copy.c b/block/block-copy.c index 0a1cf3d0cb..b7bcb9da86 100644 --- a/block/block-copy.c +++ b/block/block-copy.c @@ -248,6 +248,9 @@ static void coroutine_fn block_copy_task_end(BlockCopyT= ask *task, int ret) bdrv_set_dirty_bitmap(task->s->copy_bitmap, task->offset, task->by= tes); } QLIST_REMOVE(task, list); + progress_set_remaining(task->s->progress, + bdrv_get_dirty_count(task->s->copy_bitmap) + + task->s->in_flight_bytes); qemu_co_queue_restart_all(&task->wait_queue); } =20 @@ -638,9 +641,6 @@ block_copy_dirty_clusters(BlockCopyCallState *call_stat= e) } if (s->skip_unallocated && !(ret & BDRV_BLOCK_ALLOCATED)) { block_copy_task_end(task, 0); - progress_set_remaining(s->progress, - bdrv_get_dirty_count(s->copy_bitmap) + - s->in_flight_bytes); trace_block_copy_skip_range(s, task->offset, task->bytes); offset =3D task_end(task); bytes =3D end - offset; --=20 2.29.2 From nobody Sat May 18 19:12:37 2024 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=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1624626778; cv=pass; d=zohomail.com; s=zohoarc; b=adliD81U6xkdlRTK5fvTGVSdyKBvyygYLY+95bymZKs2I577uMJpGm0kCH57Lhblm37KV5YLpdhDPatDUIG2uc7l9vy2nQ50cCMC56NNp1Oyk0V45/nXRQuhDnubToZQIHZDGGUzCMph8EQ69Wcx/y2/X9TNNf9pxOUzXjG98Eg= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624626778; 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=C7sMJe4XLIInm0Z9thxQuyy8zTbS1a7EmSxBZ4RC/9w=; b=gSs2tG00Pg+367ViuCkuQ1DQbab90UM9fuCVFN8ywb2kqDjZZ3IrF6+qfjxooQ4nM7ui8KuqXq7LYTjjoFCmlZwpcL2+cBTtcfUn6l4HtOg5j8KmQSs3eG5SRie8oYqK1BqsFG988y07bXb81rb9kvz8g9yTb+kmm4nw/sH7YFg= 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=1dmarc=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 162462677891594.78010884670402; Fri, 25 Jun 2021 06:12:58 -0700 (PDT) Received: from localhost ([::1]:41476 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwldh-0005XJ-R3 for importer@patchew.org; Fri, 25 Jun 2021 09:12:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43468) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwlS2-0000uX-TW; Fri, 25 Jun 2021 09:00:58 -0400 Received: from mail-db8eur05on2104.outbound.protection.outlook.com ([40.107.20.104]:54361 helo=EUR05-DB8-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 1lwlRw-0006GP-7D; Fri, 25 Jun 2021 09:00:53 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AS8PR08MB6134.eurprd08.prod.outlook.com (2603:10a6:20b:291::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.23; Fri, 25 Jun 2021 13:00:32 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955%6]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:00:32 +0000 Received: from localhost.localdomain (185.215.60.221) by HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Fri, 25 Jun 2021 13:00:31 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VcMa1HIaAey6xbcrgIMncgP9TJBf0trevTiSZOrzuJaA8KFrJcSNjuftBuj4/cmJnecCu27jHMRJlJdrP0zKEwz3OkZdKArC7L5LpIYHkvoXVstM6ZzYDxy8ytUu1InrFiqcTLM4wSBrzIC1Zpf7RsjN4fg81WxAghk+DGHbPiewA+JXQ0rHNTUJSnQ8mifKpwtyKk78deQszQDA5UFPKrVbIg8J/i6+V+CMGnJeKfLDofiJU6vKVS2hBFJNmUna/i3eahj/PWTxDxXAPo4YE8rrs74MlA477SY4IM5TZwQtkyFiGBRAVgwWPFi2FL1JGsCOkgPMWApd3z7gZJneKQ== 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=C7sMJe4XLIInm0Z9thxQuyy8zTbS1a7EmSxBZ4RC/9w=; b=AlmcUnxhwtmSoEUng2QRYlHwA7Uf52VB/zuTvnPIVCnsJXau19wGisC+KnO3UCpqJyW3cSUlXpFj6xr3kYE5ypuIevr/BSCEm7GNGSIrzQTnNde92h1Pg5i+EQLFR5BQDBQkuJIpqiNa/tocA7DcznQT2nd79AG9NIu7fPSyJJqIBKuNNzOh0cm3XFHB0nExRlK+ID26/ISEHmQ8SiZZAiY81lgHg3XKMEK8SGEnvx4fF/OdAEcR2fcINlY+EldFFsO6N+Uvti+Kx2z4i66b4ldpSGkYrfRzYktvUXHwsDaucekZ671oMGUxHrAkfkSBjMK4KYBK7CdMukEDJF46qQ== 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=C7sMJe4XLIInm0Z9thxQuyy8zTbS1a7EmSxBZ4RC/9w=; b=huH5iDKRXwPNQfwrlUZFlJ3j3CZh7Ir/3LkZ/ICyof30grraF8nyg4UaeND5KZRi6LwgBZuLEgjSDSXvT2Un0wd/OJjqO8okAkpcBB3zBoIZf/I18ie7a+G18bM2WMTVK7PuLq7v+2jj29mRsGZswpwthfVR2AoBD9ATM0b+rkk= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com, pbonzini@redhat.com, stefanha@redhat.com, eesposit@redhat.com, peter.maydell@linaro.org Subject: [PULL 09/10] block-copy: add CoMutex lock Date: Fri, 25 Jun 2021 16:00:05 +0300 Message-Id: <20210625130006.276511-10-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210625130006.276511-1-vsementsov@virtuozzo.com> References: <20210625130006.276511-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.221] X-ClientProxiedBy: HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3d6e9974-9ae9-4edf-c509-08d937d9376a X-MS-TrafficTypeDiagnostic: AS8PR08MB6134: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:7691; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: owKO0jwhGsPRVvhZRmH3TJ4KJ3LQa1EtR6L/2+1SoC2Tk92ZZfeQ56aCAZXV+pE4sSqfq4hzt4nv/DiSsecsfMExnQuZnguEdDAlenTYqFX3fD3+b0TVBEXHpKIPYCYjHK20WQXmTTldBj/Xpm93l3wdXzTV1AobaSJXprE6d3HAFXg96/zi+xcoBiENqzFuyyKnQXu4mWNQhiKNGuZMC8kIElwr2/9h0w74+nW7GHa0w/Of8NaxyunCVlmrO23PBMebkmT3n4LGu+VPBEfvME/8ldsvyXHyCvgGZJm6kDXl2FwyTmJMIl1wMRW43+qLHQMtXi+2Qnj6O/NgW6SgeWSvVEhiTto+pBoa5/FUVvvXHb8p5wYVDuIENkDG4AJQiryAaJhY+4DObLnXaBFj42wlMuZWRPbJBZ3FmAxbsDVQGNoKDNxlkF4FRkURlp+cfdsD7UOj0D99WWPREBvBo5gyc6JTaA9/f3yt+9GzNnjbaIph8Xn/C9i9vQhnYLfAIWxtIO2lZwGaZwEFs4zmeeEYaAKMcYYLzN2z6nqcu/wKsiAdw+EoydM3oJvNukcHUeP/De/0YsH5NIZYydzmJrKvpBFLXj3gjMK4G2rHNxTPvSB7Tj8NsF8gHM+1dTb2tYi7vUUqlcJ6vCJ3pv2jW5K/RR1gtW93uuNKSWhNJRVUs3SqZx5UDFfUGtvxi+R/ 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; SFS:(6029001)(4636009)(376002)(346002)(396003)(366004)(136003)(39840400004)(6916009)(6666004)(66556008)(66476007)(2906002)(66946007)(956004)(8936002)(16526019)(8676002)(6506007)(6512007)(26005)(478600001)(2616005)(38350700002)(38100700002)(6486002)(316002)(83380400001)(86362001)(36756003)(5660300002)(30864003)(1076003)(186003)(4326008)(52116002)(69590400013); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?ADwEl+Ontq5AAAstA3IohBErT84+J9wpHmZpcMlAH5O+btbOIzUexkmkw0X0?= =?us-ascii?Q?UzIJWTWTBFD6i2ZsKL5ol2jLRy7zbFo4CLkUnBmb6bfDgu1kyqoMFV8gPVMj?= =?us-ascii?Q?gN0VHypGKXG/bezdCtK/OmMOrxhb5TxyRSq7a9c3J8ukskVuOtF23tV3K4ea?= =?us-ascii?Q?8zFu6sxuxXSQj2fjCQjM5rUcvYZMsS8YzCzKQDQGc/TadbWUtJbPKYg8DnPv?= =?us-ascii?Q?ofZKYbKuqumODVi1KW9Qw+dlpx+KOA491pJkMc8ijxlANhxyEXfXbsD825kg?= =?us-ascii?Q?oxBk4iZHhd18xnRhyP/CdZP//5TSqVRLbQyGhgEgAAEP/QzuzPK+ekdesL/w?= =?us-ascii?Q?tAhmaHM9WI0aIRgZlExliPpZ0K/IKsJHVjWdhG6IObxqOKgZNfLMUmdD167h?= =?us-ascii?Q?eBy/AcNpLOYDuXEpQWeaPXSk5RHtG0CzG/M8rkMgNlPx7IQoamNlPwSJMelp?= =?us-ascii?Q?TQVyOd5cEGfG0M7N3g4oCABycGvh1OHb+O7Av+nCAQgDSvxZhtXZbHTCpmAb?= =?us-ascii?Q?+3mUnr4Sx9BqJjLBJzscnxX5U7o3ELhntTQ/mWcsf12m+jJN6mdmk/zhG4j0?= =?us-ascii?Q?v9Q8AOYkiOg6BYuweYosTMRh4v00zF+LxDhtSHweUA/aWeANmO8DPf69SQ7H?= =?us-ascii?Q?NSqyV0uRDToFdJEgFnQ0ZaVJdACA6ekuBgfP4z4zGBdwLObibF+OVQekDf/2?= =?us-ascii?Q?mQdjeJkjP65WgSQIiBVCMQKFHzFcQhVXrzwCXvTuaokq96/xEERzTvp2EQE1?= =?us-ascii?Q?pDqkkYW0q45bnjZjoJJ+rEb8ARJPYUHYcl4xDpQHfNIIB/qIWs7m+dY+VGHn?= =?us-ascii?Q?gNaZtica7thaQIhMTodaZBxnWVaOm8d6fNwHZN2IytT9Vh4Pz2mjQXLLFMuc?= =?us-ascii?Q?ldT0VZvY0t/NS6HznPQnewMjFprCcjP8ncjSerk6TO89W5g5yI2jbdICU7TK?= =?us-ascii?Q?q8kr5VxSW9KHdJM+saKV/QgqUNt7bmYQ2s5iDMmF+qK9q1lhG9q9cfyeTS3o?= =?us-ascii?Q?qDv/MI4q25fLfVSNWEOVH/RR1rx4OS0miZ1YPN2xHduAO2sJOJorWxnMEjfY?= =?us-ascii?Q?sb4hktJxfKky74fB2A4KO72XkVRk/1jrD3bY6NflJX5h1Yhj0WdQ5o/1QOEJ?= =?us-ascii?Q?ot+P8mGEm21iKiRC83Yjmku0H8LyAq15iwYp30qaMoNcbJLGp37FlzGPex6Q?= =?us-ascii?Q?QtmHOxRo1MNQj6mfOu/c7aaPBabj2apng9E7s5XmkDISsFmTGH2il8fSHlqn?= =?us-ascii?Q?e1x6WdCGH0Js5RF8yBQnizweXPoaa+Jj5UarSSwAFnsLv6r3TElpnlgoUGPi?= =?us-ascii?Q?d1KQjyyUYwjSJhRTcvZL/C29?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3d6e9974-9ae9-4edf-c509-08d937d9376a X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2021 13:00:32.8264 (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: aS3XUj9hdtxV+pKuOLFKKlpi+Fr5rVHjKDoWaOU6S8xq83FDoxfWbet74KtawCZDx33LCuVnG5G04CTl2MibfnzeszERIwrKuEU/PhHcCFo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6134 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=40.107.20.104; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-DB8-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Emanuele Giuseppe Esposito Group various structures fields, to better understand what we need to protect with a lock and what doesn't need it. Then, add a CoMutex to protect concurrent access of block-copy data structures. This mutex also protects .copy_bitmap, because its thread-= safe API does not prevent it from assigning two tasks to the same bitmap region. Exceptions to the lock: - .sleep_state is handled in the series "coroutine: new sleep/wake API" and thus here left as TODO. - .finished, .cancelled and reads to .ret and .error_is_read will be protected in the following patch, because are used also outside coroutines. - .skip_unallocated is atomic. Including it under the mutex would increase the critical sections and make them also much more complex. We can have it as atomic since it is only written from outside and read by block-copy coroutines. Signed-off-by: Emanuele Giuseppe Esposito Message-Id: <20210624072043.180494-5-eesposit@redhat.com> [vsementsov: fix typo in comment] Reviewed-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/block-copy.c | 155 +++++++++++++++++++++++++++++++++------------ 1 file changed, 116 insertions(+), 39 deletions(-) diff --git a/block/block-copy.c b/block/block-copy.c index b7bcb9da86..f3550d0825 100644 --- a/block/block-copy.c +++ b/block/block-copy.c @@ -39,7 +39,7 @@ typedef enum { static coroutine_fn int block_copy_task_entry(AioTask *task); =20 typedef struct BlockCopyCallState { - /* IN parameters. Initialized in block_copy_async() and never changed.= */ + /* Fields initialized in block_copy_async() and never changed. */ BlockCopyState *s; int64_t offset; int64_t bytes; @@ -48,33 +48,60 @@ typedef struct BlockCopyCallState { bool ignore_ratelimit; BlockCopyAsyncCallbackFunc cb; void *cb_opaque; - /* Coroutine where async block-copy is running */ Coroutine *co; =20 - /* To reference all call states from BlockCopyState */ - QLIST_ENTRY(BlockCopyCallState) list; - - /* State */ - int ret; + /* Fields whose state changes throughout the execution */ bool finished; - QemuCoSleep sleep; + QemuCoSleep sleep; /* TODO: protect API with a lock */ bool cancelled; + /* To reference all call states from BlockCopyState */ + QLIST_ENTRY(BlockCopyCallState) list; =20 - /* OUT parameters */ + /* + * Fields that report information about return values and erros. + * Protected by lock in BlockCopyState. + */ bool error_is_read; + /* + * @ret is set concurrently by tasks under mutex. Only set once by fir= st + * failed task (and untouched if no task failed). + * After finishing (call_state->finished is true), it is not modified + * anymore and may be safely read without mutex. + */ + int ret; } BlockCopyCallState; =20 typedef struct BlockCopyTask { AioTask task; =20 + /* + * Fields initialized in block_copy_task_create() + * and never changed. + */ BlockCopyState *s; BlockCopyCallState *call_state; int64_t offset; - int64_t bytes; + /* + * @method can also be set again in the while loop of + * block_copy_dirty_clusters(), but it is never accessed concurrently + * because the only other function that reads it is + * block_copy_task_entry() and it is invoked afterwards in the same + * iteration. + */ BlockCopyMethod method; - QLIST_ENTRY(BlockCopyTask) list; + + /* + * Fields whose state changes throughout the execution + * Protected by lock in BlockCopyState. + */ CoQueue wait_queue; /* coroutines blocked on this task */ + /* + * Only protect the case of parallel read while updating @bytes + * value in block_copy_task_shrink(). + */ + int64_t bytes; + QLIST_ENTRY(BlockCopyTask) list; } BlockCopyTask; =20 static int64_t task_end(BlockCopyTask *task) @@ -90,17 +117,25 @@ typedef struct BlockCopyState { */ BdrvChild *source; BdrvChild *target; - BdrvDirtyBitmap *copy_bitmap; - int64_t in_flight_bytes; + + /* + * Fields initialized in block_copy_state_new() + * and never changed. + */ int64_t cluster_size; - BlockCopyMethod method; int64_t max_transfer; uint64_t len; - QLIST_HEAD(, BlockCopyTask) tasks; /* All tasks from all block-copy ca= lls */ - QLIST_HEAD(, BlockCopyCallState) calls; - BdrvRequestFlags write_flags; =20 + /* + * Fields whose state changes throughout the execution + * Protected by lock. + */ + CoMutex lock; + int64_t in_flight_bytes; + BlockCopyMethod method; + QLIST_HEAD(, BlockCopyTask) tasks; /* All tasks from all block-copy ca= lls */ + QLIST_HEAD(, BlockCopyCallState) calls; /* * skip_unallocated: * @@ -115,15 +150,15 @@ typedef struct BlockCopyState { * skip unallocated regions, clear them in the copy_bitmap, and invoke * block_copy_reset_unallocated() every time it does. */ - bool skip_unallocated; - + bool skip_unallocated; /* atomic */ + /* State fields that use a thread-safe API */ + BdrvDirtyBitmap *copy_bitmap; ProgressMeter *progress; - SharedResource *mem; - RateLimit rate_limit; } BlockCopyState; =20 +/* Called with lock held */ static BlockCopyTask *find_conflicting_task(BlockCopyState *s, int64_t offset, int64_t bytes) { @@ -141,6 +176,9 @@ static BlockCopyTask *find_conflicting_task(BlockCopySt= ate *s, /* * If there are no intersecting tasks return false. Otherwise, wait for the * first found intersecting tasks to finish and return true. + * + * Called with lock held. May temporary release the lock. + * Return value of 0 proves that lock was NOT released. */ static bool coroutine_fn block_copy_wait_one(BlockCopyState *s, int64_t of= fset, int64_t bytes) @@ -151,11 +189,12 @@ static bool coroutine_fn block_copy_wait_one(BlockCop= yState *s, int64_t offset, return false; } =20 - qemu_co_queue_wait(&task->wait_queue, NULL); + qemu_co_queue_wait(&task->wait_queue, &s->lock); =20 return true; } =20 +/* Called with lock held */ static int64_t block_copy_chunk_size(BlockCopyState *s) { switch (s->method) { @@ -178,13 +217,14 @@ static int64_t block_copy_chunk_size(BlockCopyState *= s) * Search for the first dirty area in offset/bytes range and create task at * the beginning of it. */ -static BlockCopyTask *block_copy_task_create(BlockCopyState *s, - BlockCopyCallState *call_stat= e, - int64_t offset, int64_t bytes) +static coroutine_fn BlockCopyTask * +block_copy_task_create(BlockCopyState *s, BlockCopyCallState *call_state, + int64_t offset, int64_t bytes) { BlockCopyTask *task; int64_t max_chunk; =20 + QEMU_LOCK_GUARD(&s->lock); max_chunk =3D MIN_NON_ZERO(block_copy_chunk_size(s), call_state->max_c= hunk); if (!bdrv_dirty_bitmap_next_dirty_area(s->copy_bitmap, offset, offset + bytes, @@ -227,6 +267,7 @@ static BlockCopyTask *block_copy_task_create(BlockCopyS= tate *s, static void coroutine_fn block_copy_task_shrink(BlockCopyTask *task, int64_t new_bytes) { + QEMU_LOCK_GUARD(&task->s->lock); if (new_bytes =3D=3D task->bytes) { return; } @@ -243,6 +284,7 @@ static void coroutine_fn block_copy_task_shrink(BlockCo= pyTask *task, =20 static void coroutine_fn block_copy_task_end(BlockCopyTask *task, int ret) { + QEMU_LOCK_GUARD(&task->s->lock); task->s->in_flight_bytes -=3D task->bytes; if (ret < 0) { bdrv_set_dirty_bitmap(task->s->copy_bitmap, task->offset, task->by= tes); @@ -321,12 +363,14 @@ BlockCopyState *block_copy_state_new(BdrvChild *sourc= e, BdrvChild *target, } =20 ratelimit_init(&s->rate_limit); + qemu_co_mutex_init(&s->lock); QLIST_INIT(&s->tasks); QLIST_INIT(&s->calls); =20 return s; } =20 +/* Only set before running the job, no need for locking. */ void block_copy_set_progress_meter(BlockCopyState *s, ProgressMeter *pm) { s->progress =3D pm; @@ -467,16 +511,20 @@ static coroutine_fn int block_copy_task_entry(AioTask= *task) int ret; =20 ret =3D block_copy_do_copy(s, t->offset, t->bytes, &method, &error_is_= read); - if (s->method =3D=3D t->method) { - s->method =3D method; - } - if (ret < 0) { - if (!t->call_state->ret) { - t->call_state->ret =3D ret; - t->call_state->error_is_read =3D error_is_read; + + WITH_QEMU_LOCK_GUARD(&s->lock) { + if (s->method =3D=3D t->method) { + s->method =3D method; + } + + if (ret < 0) { + if (!t->call_state->ret) { + t->call_state->ret =3D ret; + t->call_state->error_is_read =3D error_is_read; + } + } else { + progress_work_done(s->progress, t->bytes); } - } else { - progress_work_done(s->progress, t->bytes); } co_put_to_shres(s->mem, t->bytes); block_copy_task_end(t, ret); @@ -491,7 +539,7 @@ static int block_copy_block_status(BlockCopyState *s, i= nt64_t offset, BlockDriverState *base; int ret; =20 - if (s->skip_unallocated) { + if (qatomic_read(&s->skip_unallocated)) { base =3D bdrv_backing_chain_next(s->source->bs); } else { base =3D NULL; @@ -578,10 +626,12 @@ int64_t block_copy_reset_unallocated(BlockCopyState *= s, bytes =3D clusters * s->cluster_size; =20 if (!ret) { + qemu_co_mutex_lock(&s->lock); bdrv_reset_dirty_bitmap(s->copy_bitmap, offset, bytes); progress_set_remaining(s->progress, bdrv_get_dirty_count(s->copy_bitmap) + s->in_flight_bytes); + qemu_co_mutex_unlock(&s->lock); } =20 *count =3D bytes; @@ -639,7 +689,8 @@ block_copy_dirty_clusters(BlockCopyCallState *call_stat= e) if (status_bytes < task->bytes) { block_copy_task_shrink(task, status_bytes); } - if (s->skip_unallocated && !(ret & BDRV_BLOCK_ALLOCATED)) { + if (qatomic_read(&s->skip_unallocated) && + !(ret & BDRV_BLOCK_ALLOCATED)) { block_copy_task_end(task, 0); trace_block_copy_skip_range(s, task->offset, task->bytes); offset =3D task_end(task); @@ -721,14 +772,38 @@ static int coroutine_fn block_copy_common(BlockCopyCa= llState *call_state) int ret; BlockCopyState *s =3D call_state->s; =20 + qemu_co_mutex_lock(&s->lock); QLIST_INSERT_HEAD(&s->calls, call_state, list); + qemu_co_mutex_unlock(&s->lock); =20 do { ret =3D block_copy_dirty_clusters(call_state); =20 if (ret =3D=3D 0 && !call_state->cancelled) { - ret =3D block_copy_wait_one(s, call_state->offset, - call_state->bytes); + WITH_QEMU_LOCK_GUARD(&s->lock) { + /* + * Check that there is no task we still need to + * wait to complete + */ + ret =3D block_copy_wait_one(s, call_state->offset, + call_state->bytes); + if (ret =3D=3D 0) { + /* + * No pending tasks, but check again the bitmap in this + * same critical section, since a task might have fail= ed + * between this and the critical section in + * block_copy_dirty_clusters(). + * + * block_copy_wait_one return value 0 also means that = it + * didn't release the lock. So, we are still in the sa= me + * critical section, not interrupted by any concurrent + * access to state. + */ + ret =3D bdrv_dirty_bitmap_next_dirty(s->copy_bitmap, + call_state->offset, + call_state->bytes) = >=3D 0; + } + } } =20 /* @@ -748,7 +823,9 @@ static int coroutine_fn block_copy_common(BlockCopyCall= State *call_state) call_state->cb(call_state->cb_opaque); } =20 + qemu_co_mutex_lock(&s->lock); QLIST_REMOVE(call_state, list); + qemu_co_mutex_unlock(&s->lock); =20 return ret; } @@ -851,7 +928,7 @@ BdrvDirtyBitmap *block_copy_dirty_bitmap(BlockCopyState= *s) =20 void block_copy_set_skip_unallocated(BlockCopyState *s, bool skip) { - s->skip_unallocated =3D skip; + qatomic_set(&s->skip_unallocated, skip); } =20 void block_copy_set_speed(BlockCopyState *s, uint64_t speed) --=20 2.29.2 From nobody Sat May 18 19:12:37 2024 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=1dmarc=pass fromdomain=virtuozzo.com); dmarc=pass(p=quarantine dis=none) header.from=virtuozzo.com ARC-Seal: i=2; a=rsa-sha256; t=1624626899; cv=pass; d=zohomail.com; s=zohoarc; b=igcMdRPbLb9fpa61SlWKVOB12IwK1vM9KDjFuthfY9MZUPZAmBV7UUPwA7NePIyaL5f4SaVIpoWmyzODo+r97tzLkzLnhis7DA59+PJSeqlzhgQcu7jJYrr9+n5xe+M0RZjqse++VL2wdCYjubePj2k/ErREgac3qqBD+Czzf8w= ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1624626899; 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=EzHk2FiluR6rLUOwIgXPlILRFFYRPAt15EX+WkhL4PQ=; b=DnYFdryuRboFfupeisQWYkkFuq2UQGaiecMh5/TQdccPgVyu1u9/sfYsWFLEneHMwhUHT0zKnP5nFUUjoEiLqXmLwSLX4zIwkTv36EiQfRaf3Tl+ZaWchHrzGd7ck05/hnBfiOcCRBZ/Xz6Vc4uz+hiGoG1N7KU59fL7bhZCCv4= 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=1dmarc=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 162462689888885.242874503964; Fri, 25 Jun 2021 06:14:58 -0700 (PDT) Received: from localhost ([::1]:44988 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lwlfd-0008Du-7D for importer@patchew.org; Fri, 25 Jun 2021 09:14:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43512) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lwlSA-0000vn-PX; Fri, 25 Jun 2021 09:01:03 -0400 Received: from mail-vi1eur05on2128.outbound.protection.outlook.com ([40.107.21.128]:11041 helo=EUR05-VI1-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 1lwlS1-0006HJ-Qa; Fri, 25 Jun 2021 09:01:02 -0400 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) by AM5PR0801MB1652.eurprd08.prod.outlook.com (2603:10a6:203:3c::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Fri, 25 Jun 2021 13:00:34 +0000 Received: from AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955]) by AM7PR08MB5494.eurprd08.prod.outlook.com ([fe80::75ce:1d52:cb60:e955%6]) with mapi id 15.20.4264.023; Fri, 25 Jun 2021 13:00:34 +0000 Received: from localhost.localdomain (185.215.60.221) by HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Fri, 25 Jun 2021 13:00:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=iF91mWKR04xqi+oMrk9ZZiw4xNMkVU3V5eXvwaxh78F3WyHGoOVxxHSxEFzMqdnYzUjQ60RAHb/E2iD0T32d902yV7gfrCDdVD4SPLa/0/njbj2CtXOd3C/x95YmUhtY/KTi4+4539q8/F+mX7sFg8qh6Sh1h2F3a3AVBoJhoIc5ssGDRZX5BJIakoS3Vtv3JztvlCJd9u9EFkkY8EsKMOaJ9PbC+rmqBEwnEb2Rz1uD4xs9TdzsME2suhUF2ngWF+3sdzSWu7PApicUQ1QG3pV7RJ9GBU9Rw7ahvlPhNPTkval3sxMYCg0JXVwysT8InN5gOLulven/V61C1plZ2A== 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=EzHk2FiluR6rLUOwIgXPlILRFFYRPAt15EX+WkhL4PQ=; b=WHRaxOmcF3As9ZfiJZe7UIgC9+w36aNWaXZ5zddTtX5i4AEKd8bTbso436tjbiOzy6rp9aMqVR8PilIOt7kknWh0xa2LxSNlnwDlhFkg5LHiFuhhVNVq+ZlccQRcgK/n8x0cu94JrAyGa206mmXgTmk1jHr/gSj0RzOhE7XY1ENf3lZxid3g4SJYMI1Lr+apbu0Ehfq729AabnpDHTMsJcam5Bwe1USLGg/myFiAElaTftOUHTr9L03+lqxcTtpNx1byg5BsOJ5ElrXnEed4mE97Zs7mpNnmm0qWu5uQg7JkXRoNjvMfdO7CXHfNbtqF3Gj5xg/AYuj34C0PKoT6Iw== 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=EzHk2FiluR6rLUOwIgXPlILRFFYRPAt15EX+WkhL4PQ=; b=H71w/QtbGtn1mf1UN/nCvDOGQeKErnjLOkP0JIszNQ+8VGLf9hKvJFNiuOkFGq4h7+ct7ZP+6qVI5+AMn+e9c/7uR7Te2PAlLu8rsURkCKO328H5ermIvm9NQ3LUL3vxZig6lV7PPvyHeiyBbHZe27kX8DxnwKNgxI5gLA9DfK0= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none;nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Vladimir Sementsov-Ogievskiy To: qemu-block@nongnu.org Cc: qemu-devel@nongnu.org, mreitz@redhat.com, kwolf@redhat.com, jsnow@redhat.com, vsementsov@virtuozzo.com, pbonzini@redhat.com, stefanha@redhat.com, eesposit@redhat.com, peter.maydell@linaro.org Subject: [PULL 10/10] block-copy: atomic .cancelled and .finished fields in BlockCopyCallState Date: Fri, 25 Jun 2021 16:00:06 +0300 Message-Id: <20210625130006.276511-11-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210625130006.276511-1-vsementsov@virtuozzo.com> References: <20210625130006.276511-1-vsementsov@virtuozzo.com> Content-Transfer-Encoding: quoted-printable X-Originating-IP: [185.215.60.221] X-ClientProxiedBy: HE1PR0202CA0024.eurprd02.prod.outlook.com (2603:10a6:3:8c::34) To AM7PR08MB5494.eurprd08.prod.outlook.com (2603:10a6:20b:dc::15) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 816fe3fe-64b8-4508-340a-08d937d9382f X-MS-TrafficTypeDiagnostic: AM5PR0801MB1652: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:151; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: lj41cubOO/h4aEYj2TOdgBCuKsGDn2Z/KRqLr+Lwhmm/1GqJKKtmRHKAVekQc3gmBGI9ea1z2Z/ZFFx7+653pKbtatR5JhXE9YPerVWuv66RDzC+f2q4/gcO9AQ179I/i9eeL9/WQj47p7Cov6cTwG4Tm28iWr+JIS32PBJ9dEJ7QrS0ZDoC5sorT9sfxVJVwrEB7dRCrdzopRHsx8nOXKk5fWofGwmDjHDJ6jCITkxrMQHXQLuAlheMqp1oP5p/fwk/sdxL8fU1pSlTFZbcK5lxEGsMyL9KRXINnWb5lrnRWOBbU8ZWHzSiPBs/nia9nuYF1wkucIMUMARYWEiybHdCcFrqmIQ04wmKbBQMp0tGRw7+P3CBQm/v9dtMRHqShdXLFonDOtFkvRK0B/S6BQwrHGKWTN2fGgARL7iJvb5qDzAWj+khY16/9TGKBH3Sq3CCW9s+DUCWjedATuXjDuBGQQPxI4XzDkoYXk4vgYnXaSgkoRQIGmeBdcjCYVJeYa7SNU2t+81c3aIS9/aZ2jikfofHDO5V0AtxjO/izCTSYAobhu7eAG2RnRlNLKBx5lbNj4xK0O8DOScKiY1VWUnZ47LWIBfF/g33WLOS5A4+TGBaIREKeaTgE6SY5UYy480vQvdLK92q2xfPxKKEpHWTfZfdTwbH4WlHl0WYxMySAtvauD6RY4nE6ujjmLdvegM5rX2Yzn8nwXro6XMl0KLd2BVeqg1naVlHl/R/SrI3NFf9ywsU6RfuGPRGbLm1RM5fSC7cgCoWhbDh63Xqwg== 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; SFS:(4636009)(39840400004)(346002)(396003)(136003)(366004)(376002)(38100700002)(38350700002)(52116002)(956004)(8676002)(66556008)(2616005)(66476007)(6666004)(2906002)(316002)(8936002)(66946007)(186003)(6506007)(16526019)(26005)(4326008)(478600001)(1076003)(6916009)(6486002)(5660300002)(6512007)(83380400001)(36756003)(86362001)(69590400013)(142923001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?01zo33/RK/JDqN4wDGaaQlWkvsMDFMpDcq/dYsX/L6lz/mLedaZyGItUkdcj?= =?us-ascii?Q?jnaofQehcpD+g1VtqOMN+pC8JyaHHO3WJOfAWo0Z4XglOxPzLpmf/cwcIcIa?= =?us-ascii?Q?1VN9apgBoVx/sfh7obrcVR/JC4Ah1QVpEli/A/7vKRNkIz5VNaH4sv+Q2a6c?= =?us-ascii?Q?QGLHYGoQQmX/tdmdVfYvIcDw/DXqm+9SGV4Bvo9Pb4i2nZuRwr+TqYVul/hh?= =?us-ascii?Q?/OjaLBUy7vYNcNIg020r6FMXgzVO/+gyL9SQDK5ZF1YIXopjVC2Ym++H3EGZ?= =?us-ascii?Q?1Nt6t+fPztBvhXEE2srpCeWq2gOSn1VR526zLw/uBj8w5mG83YZhfzn6c3hX?= =?us-ascii?Q?44La8yYzExTqiDrlnnxtWy1o5kd3knApTIxLiXZ9WZ1tur8BMEdZ/tyCZ/WE?= =?us-ascii?Q?v/1n/9SUmEBUFqKU0Dox6TiQQaLkvhFgzmYOJgmqUd5P6RrPJyNmRN5qbrTL?= =?us-ascii?Q?CI/ZCLMJnG3t0PdbY7fqlYK0m3P2gHOUJAWyoOS7i+GyJ3SS6DQvrPg1GjJg?= =?us-ascii?Q?Wccjy1VOqUfMIXCu0zeTbvULrmVjF2om/GyilZHbB/N8ySdp9/7YpHH1uF8V?= =?us-ascii?Q?IOuEDSigCLThUvS8zdurB5BNkFJIvkP6IpePU1B4VIKrHmpZrcWt950bRVcv?= =?us-ascii?Q?PFyr/p5lL45TREGUBK87N9G1dBjWMjbL4Fbjr+O+2hdVyBLdPaf20b308lvE?= =?us-ascii?Q?4ugwXvO8HBycsicLeqGHc9zrKBUGyeQoECv+IVYGQLTUnmuyC0Ok7kRzjq7u?= =?us-ascii?Q?LynO7ztJf77VyDRaUTKc76m55bs5gXI5CyK5Orr66lyE3yQGp3VhxCTGFqSs?= =?us-ascii?Q?2Ez/UlPtKA+g5qsI+X5zYcE4nu+J1+lgrGOIBhKuP9ByTB/afyfWJ+uj8wTA?= =?us-ascii?Q?HklEoBxWXAFcrqqDu7E7V0w+zgMZgq7C/KADd0Pb/bSpaQrLGjmmRkmbRA3C?= =?us-ascii?Q?6MMlOu2fZm1V+SPp19VGKFuyKLdPAJvHF2hntONJ3LZFzhrvYnxsnCGnrM6B?= =?us-ascii?Q?JK2V+3FykVyQtFmDFvLBvT1hRa6MTkt+dnELIsgFwoh8NZbIRK6iKGkT6GgW?= =?us-ascii?Q?19+WVast0fUX1o+s/uLctHgIV2Rh8JBujLEq+mus4F66jrgzqgjK+Fp/Reke?= =?us-ascii?Q?wHgeapfPmgOuFDYYNn+GwnlvvCQJG3MYxY0Lj5HB+zOtiTx6zRoIulHb6q1/?= =?us-ascii?Q?fvYjZmHgS5doEZkZHmOevBGWY9z9Smlqqyk5yi4LSRmyZMaPgzIl6jiAp+K6?= =?us-ascii?Q?kyo5lcgW+WnuuzWjEl2z/KnxtPqM6cgjwkSBZ2V6cOsu05BuSE0drwCNnki0?= =?us-ascii?Q?wWLUQAl+XcEz5D+6fkep1mrI?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 816fe3fe-64b8-4508-340a-08d937d9382f X-MS-Exchange-CrossTenant-AuthSource: AM7PR08MB5494.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jun 2021 13:00:34.1277 (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: UUeAHHRO+jgUrZuydYe83bgUZO1MQgo/C++cimXOEbhhe8IwidyygHdktOTXsvgo5ZOyq8FJInUH5EoGP7tNJhFJAM7vjh5vFnQ4C0R8ac4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1652 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=40.107.21.128; envelope-from=vsementsov@virtuozzo.com; helo=EUR05-VI1-obe.outbound.protection.outlook.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @virtuozzo.com) Content-Type: text/plain; charset="utf-8" From: Emanuele Giuseppe Esposito By adding acquire/release pairs, we ensure that .ret and .error_is_read fields are written by block_copy_dirty_clusters before .finished is true, and that they are read by API user after .finished is true. The atomic here are necessary because the fields are concurrently modified in coroutines, and read outside. Signed-off-by: Emanuele Giuseppe Esposito Message-Id: <20210624072043.180494-6-eesposit@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy Signed-off-by: Vladimir Sementsov-Ogievskiy --- include/block/block-copy.h | 2 ++ block/block-copy.c | 37 ++++++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/include/block/block-copy.h b/include/block/block-copy.h index 338f2ea7fd..5c8278895c 100644 --- a/include/block/block-copy.h +++ b/include/block/block-copy.h @@ -18,6 +18,8 @@ #include "block/block.h" #include "qemu/co-shared-resource.h" =20 +/* All APIs are thread-safe */ + typedef void (*BlockCopyAsyncCallbackFunc)(void *opaque); typedef struct BlockCopyState BlockCopyState; typedef struct BlockCopyCallState BlockCopyCallState; diff --git a/block/block-copy.c b/block/block-copy.c index f3550d0825..0becad52da 100644 --- a/block/block-copy.c +++ b/block/block-copy.c @@ -52,9 +52,9 @@ typedef struct BlockCopyCallState { Coroutine *co; =20 /* Fields whose state changes throughout the execution */ - bool finished; + bool finished; /* atomic */ QemuCoSleep sleep; /* TODO: protect API with a lock */ - bool cancelled; + bool cancelled; /* atomic */ /* To reference all call states from BlockCopyState */ QLIST_ENTRY(BlockCopyCallState) list; =20 @@ -667,7 +667,8 @@ block_copy_dirty_clusters(BlockCopyCallState *call_stat= e) assert(QEMU_IS_ALIGNED(offset, s->cluster_size)); assert(QEMU_IS_ALIGNED(bytes, s->cluster_size)); =20 - while (bytes && aio_task_pool_status(aio) =3D=3D 0 && !call_state->can= celled) { + while (bytes && aio_task_pool_status(aio) =3D=3D 0 && + !qatomic_read(&call_state->cancelled)) { BlockCopyTask *task; int64_t status_bytes; =20 @@ -779,7 +780,7 @@ static int coroutine_fn block_copy_common(BlockCopyCall= State *call_state) do { ret =3D block_copy_dirty_clusters(call_state); =20 - if (ret =3D=3D 0 && !call_state->cancelled) { + if (ret =3D=3D 0 && !qatomic_read(&call_state->cancelled)) { WITH_QEMU_LOCK_GUARD(&s->lock) { /* * Check that there is no task we still need to @@ -815,9 +816,9 @@ static int coroutine_fn block_copy_common(BlockCopyCall= State *call_state) * 2. We have waited for some intersecting block-copy request * It may have failed and produced new dirty bits. */ - } while (ret > 0 && !call_state->cancelled); + } while (ret > 0 && !qatomic_read(&call_state->cancelled)); =20 - call_state->finished =3D true; + qatomic_store_release(&call_state->finished, true); =20 if (call_state->cb) { call_state->cb(call_state->cb_opaque); @@ -880,44 +881,50 @@ void block_copy_call_free(BlockCopyCallState *call_st= ate) return; } =20 - assert(call_state->finished); + assert(qatomic_read(&call_state->finished)); g_free(call_state); } =20 bool block_copy_call_finished(BlockCopyCallState *call_state) { - return call_state->finished; + return qatomic_read(&call_state->finished); } =20 bool block_copy_call_succeeded(BlockCopyCallState *call_state) { - return call_state->finished && !call_state->cancelled && - call_state->ret =3D=3D 0; + return qatomic_load_acquire(&call_state->finished) && + !qatomic_read(&call_state->cancelled) && + call_state->ret =3D=3D 0; } =20 bool block_copy_call_failed(BlockCopyCallState *call_state) { - return call_state->finished && !call_state->cancelled && - call_state->ret < 0; + return qatomic_load_acquire(&call_state->finished) && + !qatomic_read(&call_state->cancelled) && + call_state->ret < 0; } =20 bool block_copy_call_cancelled(BlockCopyCallState *call_state) { - return call_state->cancelled; + return qatomic_read(&call_state->cancelled); } =20 int block_copy_call_status(BlockCopyCallState *call_state, bool *error_is_= read) { - assert(call_state->finished); + assert(qatomic_load_acquire(&call_state->finished)); if (error_is_read) { *error_is_read =3D call_state->error_is_read; } return call_state->ret; } =20 +/* + * Note that cancelling and finishing are racy. + * User can cancel a block-copy that is already finished. + */ void block_copy_call_cancel(BlockCopyCallState *call_state) { - call_state->cancelled =3D true; + qatomic_set(&call_state->cancelled, true); block_copy_kick(call_state); } =20 --=20 2.29.2