From patchwork Mon Apr 24 09:43:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Ivanov X-Patchwork-Id: 1772785 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=ehk6sujR; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Q4gGl1Qtkz23hs for ; Mon, 24 Apr 2023 19:45:19 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pqsjd-000417-KO; Mon, 24 Apr 2023 05:43:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pqsjG-0003uc-Bf; Mon, 24 Apr 2023 05:43:28 -0400 Received: from mail-db8eur05on20723.outbound.protection.outlook.com ([2a01:111:f400:7e1a::723] 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 1pqsjE-0001KL-FL; Mon, 24 Apr 2023 05:43:25 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kV/hYneAJxX6Mq7hLlQgEQHWJdbKcFqFqAxOR0mSLBGEee8CU5bM/DvzyNNAfxR6DAM+I1eljS/zEx4gc+LJAIfaVEorDWdnyDU4TIzcNHhWKoInGzn2ZStmIbqwDH786t6/hG+oP/V5Kli3XNNEIOoyqQzOFtOf4hcG5wni6SYFTtadS3e0sPKsWrB8E+wMVfW8uMLxEGKU8R7ygkKpOGIfmKo2C1g5FY4xC7mS9u+sHztYkQ5LvqEEXd5Wk9Vn7scjWeakFjgQWrJPB4JdsSoKv/S2+EvXtelPYmFsdTTOO39Hc2ePJFSK7wMTCLBSWraF4tkx3/WHnSF+ctkitA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mvYlYjE+FC4X0h3xY84ctwUCDNjGejj/g2TLHF1kcrM=; b=RnMceNQYvdY0L63mstcQzT6J4fCGWAwAhdUuVDS7OpAlipptM44lLbVMzU1MnQz6zlrW4XJdNd7qDOUwSzR/+Rt5sAaVkSoqbYqDYOwJtY31Mg7lnw39BqvK/lz796IEVD6UQG7gTXwnetuvnLVsA8tpGhVQkebQonXxpwP6r7UvylYPQ0V4EMJeD0U0Y9lhUiR/Y2VdymX9cTPUShtTZBVhqicWZHbjuESzmkBlgciohkVonVFxLL21yxaEKGtu7p4tY4M/b87HTmSWylI6xZC6ujRDi45fxqkZ6TDoDe7VWLjTexXRR4KYv0gZgSHnimIialtNpHZ2m2MkWcPmPg== 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=mvYlYjE+FC4X0h3xY84ctwUCDNjGejj/g2TLHF1kcrM=; b=ehk6sujRTd047KiQe3oBLpcHRWAqNifLFXK80pKY49MWdIWiXW82f/3pRZcGKI0vi9lbwX9KRhn0/u5tuaymXq3kaGdowwmhrwXJp3OoLagSNxaXxDdkNIkZxHdAujwKpVGH5OCrVyBu1R0HIIfM/H5BUE3O6iIv5r9KrgQbb6B8rlw9iCqvdOUKJnbKrArcfwD3zXQIZMcPP2dvCiwi+wpNvT5y+0k14f2s881VtY0jRPeB62dBtAJpxp1tn78K3DuWyB3RQfLwVs5mRN9debfk0/7hKx+MVPUcGkp2gnnuI9TPPtEJ6Z8RfPJWnLYp8fdTr1QfdmFaDVQrXJi6RA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DBBPR08MB6188.eurprd08.prod.outlook.com (2603:10a6:10:1f6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.33; Mon, 24 Apr 2023 09:43:20 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::b630:c4eb:fba3:1158]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::b630:c4eb:fba3:1158%6]) with mapi id 15.20.6319.033; Mon, 24 Apr 2023 09:43:20 +0000 From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, den@virtuozzo.com, stefanha@redhat.com, vsementsov@yandex-team.ru, kwolf@redhat.com, hreitz@redhat.com Subject: [PATCH v4 1/5] parallels: Incorrect data end calculation in parallels_open() Date: Mon, 24 Apr 2023 11:43:05 +0200 Message-Id: <20230424094309.197969-2-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230424094309.197969-1-alexander.ivanov@virtuozzo.com> References: <20230424094309.197969-1-alexander.ivanov@virtuozzo.com> X-ClientProxiedBy: VI1PR07CA0247.eurprd07.prod.outlook.com (2603:10a6:803:b4::14) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DBBPR08MB6188:EE_ X-MS-Office365-Filtering-Correlation-Id: 79a7f5ae-ceca-48a0-7a11-08db44a85659 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Gs3FHLZ2ahuTBmB6k+awX1y2kae1bXupRDxN8lKkK02nn1HiHzVYq5T2RVyfdU2tyBmaCw/eUIePpuhcrGy9ShyF+KkalLw+6OIB7Ie4CS6ZB1+tr6edxkdkfnTteowUo+6q9lA74fSIRVYw3u31yYl+qUSpgarSVht3GpiZmJKvxt6AtxcS7GQn5o9oyodsB2eMsHeiqhIhsjTdQJ1MYLppW4+gpZ8G9NrOCTYEE+SYQFSsJqUbxk/gwY13XCB3kCL4QSIEBP7aaNQIJqbNx1VegtVp5QwtlOLoH+UZNs+wj2vmEwMIFQki5nAsdOjqCbUqrrwaxEQdQfgycgIFeSho7fgR9kJbVg4aZlIK9ZhuG0yGcUARN/pcXlrferhjsktUNBBsXXIWMWvH7XV4XI9uro4mUAU4BDMWWKrs1jOLM3akR5mmkeQTpK2gD7DmTaZhX7zYBxChXs/0TkAS2YKuCIx5OlPV9AtPrwoA3N4j6jk+SohstAc8G2FFyy2PmUi7uoGGp1VRNs8YpJj7Xn68uBu2hYIVBkCX5LFwrdTDhaD1t95W+O40NkyrmD5qNjbv7F75NTkju8R2XZ0hPKhrJliMavVmEuR5ANqr7ghncCA9Gv8fOuJhQGzgR9Ic X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(136003)(39850400004)(366004)(376002)(346002)(396003)(451199021)(2906002)(66476007)(66556008)(66946007)(6916009)(316002)(4326008)(44832011)(8676002)(8936002)(5660300002)(41300700001)(36756003)(86362001)(6512007)(26005)(186003)(1076003)(38100700002)(38350700002)(478600001)(52116002)(6486002)(6666004)(83380400001)(2616005)(6506007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: /QI829e954p9m3cocwBAIn5OaZyLO++wjDLwaJtbiL1tAWxxTFrz7RB739FQMkCxHid47AlsZklVgwMZGDzDXdG8qJCDSWtA5cYJF4Zc9QRzzSewuLqK2ptdbpRfix+ieG0wi8pxezo9tk0vjNnH4EGD7x5Dz6bNcntGm+Iv+ddUDGAp6NMbmjzpi6uekau1k+myql8L5gwirstPBAgq4BJOSjKU6PbGnuoI/FLg3tQtg1RXJURFczea6gsVWW8XehzLEIa7R50r6kchxrYUJ2HZjjncuA541aGLyCUf4R/XfsHURY95r2LdKkzzlPX8ICxxagv8478WKIsYUtcQ0rFMdijQvbhB37NVjBnNjq01KcQej6O6l/FYp5Y7iuPoo7BJHQmLW0ZuV1xlnVIpCh/PyR08sC+bwxD9Ce1EeJuHKMk7/GzD8SaXRxNNWTU+nZE+2uMwTruSjbb12627CLZsVz5yXF3WsXa9bObXdc1sr18pa9MP09ueU5uRw3ftJgDBibygdfJc5wxsrZh7FMMiNRvhAt/UwFwF1w0j0rOl32Gfv6+n+CfB8rHi/vVJEpcmfkKAWc06jf3JxHMbfT7OeS7G24EY902h8Xj569LqlMJId8Fs4yBPuiE3PdC0gPCHZacFc4prb+Ano+dG2fsO0MpKvBiGAQnxlo9mQy8Ak1LZRxcF+i2O5zjvDBuroY0b/OfppemJwDspXVZavAf4sPve5T7E/HORGKWS0z5XqeCKYTvx6tqDl0FQ1xZLs+ttz2Ox9bKUowc2i+b5v9zYLMAE8RjHVRBZKT2FWLRTklNacI4hK6Lixl4XlPFYG9fePMVwbskthfJxRz184JourdDAGUNu140KnSsBD1uPAlNAMyCqeHJsAqu7mAh4IfcjugpSewjoHlVM7ROPhDejZAhBtQVQS9Mq8ZX3bISs9vnDG7FSLuzTAz+G8aSx3kJfIK54tfyGFyIAL1xEzi5c6ErYglbGBcUP5dtBA++dzMyK/OG5n/SiXjfORrpoxELgRDvqxQejEpbsn+l5jsUBI4PdrS5cFhkGrinbXj9mmS9cGVvkTUQSz2MueQ0Rp0LEuF3xU1X4sgwON/Z/rZezKDZTTy/xiCYvaD8KbPGCZu3+SuikB9Zsb6chOBVPKSwcUzjWGPXSxCFMnMTvDVQ+Q67uP2wowSsSAOKC0FRIgX3EmxEIKuvS49VJ/p+qcwbFSaLnmLl3pr+4u/QQGFXDm0wH8LG6d/Q43rgZSzXF+6pOffI2exKcn0pLjRQuPB6F/u71Umfgv8DZL98ciu5WsFu1t/Q1sasyHguN4HVJE3TjcaZqUgUvqVuediQD/tb0ZgIE37gCNQOSxyASx5NCN3HMqPdWQOKVDuJU26t5vOkxIcpt0XjY5w/HtUh1IuC86bC7O015flILmToPEMHhRZisS+iJu/YliXPVLkyvaghATq0m3YLPs81s92eKQXG6Te0pwMP2AwAoCiQlZMGiJNTONBusqMKL/skI3fARlJj5+m/a569qqDXaC1BEIEDjzZSsIneRQ4SpoR+N/mSV3Dp3W7KwPnygU/ObT5ownM2Jfn7hN18XStUhrQ3AF4IQKKaKDpwJdnuZ42+B8g== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 79a7f5ae-ceca-48a0-7a11-08db44a85659 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2023 09:43:19.9762 (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: XrC1NAjRTk5fMw/Xpl27gpSz+hIYNRFNYkdE4cUZ06AdaLTZgBEV3li1a0EDBfZaDQfm8naVZWeKhMjHjkh9f8FY1TVLbvEGTTMNa1t5qm8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6188 Received-SPF: pass client-ip=2a01:111:f400:7e1a::723; envelope-from=alexander.ivanov@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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The BDRVParallelsState structure contains data_end field that is measured in sectors. In parallels_open() initially this field is set by data_off field from parallels image header. According to the parallels format documentation, data_off field contains an offset, in sectors, from the start of the file to the start of the data area. For "WithoutFreeSpace" images: if data_off is zero, the offset is calculated as the end of the BAT table plus some padding to ensure sector size alignment. The parallels_open() function has code for handling zero value in data_off, but in the result data_end contains the offset in bytes. Replace the alignment to sector size by division by sector size and fix the comparision with s->header_size. Signed-off-by: Alexander Ivanov Reviewed-by: Denis V. Lunev --- block/parallels.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/block/parallels.c b/block/parallels.c index ce9ac47c55..60033c1204 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -861,9 +861,9 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags, } s->data_end = le32_to_cpu(ph.data_off); if (s->data_end == 0) { - s->data_end = ROUND_UP(bat_entry_off(s->bat_size), BDRV_SECTOR_SIZE); + s->data_end = DIV_ROUND_UP(size, BDRV_SECTOR_SIZE); } - if (s->data_end < s->header_size) { + if (s->data_end < (s->header_size >> BDRV_SECTOR_BITS)) { /* there is not enough unused space to fit to block align between BAT and actual data. We can't avoid read-modify-write... */ s->header_size = size; From patchwork Mon Apr 24 09:43:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Ivanov X-Patchwork-Id: 1772780 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=eQP8Rmpr; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Q4gFN3FBHz23td for ; Mon, 24 Apr 2023 19:44:06 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pqsjb-0003z9-Qs; Mon, 24 Apr 2023 05:43:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pqsjK-0003vD-87; Mon, 24 Apr 2023 05:43:30 -0400 Received: from mail-db8eur05on20723.outbound.protection.outlook.com ([2a01:111:f400:7e1a::723] 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 1pqsjH-0001KL-Nt; Mon, 24 Apr 2023 05:43:29 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Lc34MyAa5EjAkRkmOQNm3ktr5S1eKH51ushbOdMQd7ML0mcCFFbEYn13vS7GB/nm5Umkc3Ct9MtypLCvsh9qwEru9yDNc7rnsjmLpsV73JszdE3MlXW8Q+C4/G4dxbGVTOiJJ6xrOmo8vxqytQ3JlVMYf+5QunkHcgOBA1KsNbqC3ILJ6XG3t8KtIPWstW/G9XA6tPVvH07WffcSJuWdlCbhsP4/+Uss8AC5pULn34l3OdDaQm8FlQ7THuNvkelNCD/CErTul9ftAuukLeQgA6z9nJFtSb3uQHf/8abU6g/W8lLQYe9D+DrpP2mfN0jEXZCSx3zmdikPCj8f3pKCWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vRo28aYJrfGHkGD1Gs4r0MZWxvh77uwtx5o5Gt0sUnA=; b=hHfAJEz274vWYR0PNgakarfjpZJdUjWdQRv1XJTeTJN2CwPPArz6MjApcJ8s55IjvJEtPTdFJvK1EnGeAfbBnJZyAjCIYzppHosznL+oDJ2CLbxHuETt4LgUjdqnpjtglWNB9vW+3C2NUQjQSPJk+B8YJf5W3I76SvXCeePwOothXgweG+1I3Uynlx1epxZwBJFl9ali263q7y1k36OmOulRpq8u+cJ1ZuGrXb9XKvmj/lBINaXyBLa9XygYuPHjwgfmZ3GgVNLPqssbKycMZoGxG4uascA6ZNuEGAZNlNFPixtY4TNY5YGa4cro3wMKNoqqHlt15CvgP9JDml1meQ== 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=vRo28aYJrfGHkGD1Gs4r0MZWxvh77uwtx5o5Gt0sUnA=; b=eQP8RmprOv2cua3OXMkVYo1q5A97NysAGUW4t6JtgyKk9owKQf+blSSesVKn3ro1j9U9/ulbv21DYXgwiRtrFhRQ5BK+rU5Hk46tBRExW+eF6/tV+ieh1gWxX47enbKyABiYe0KMIXYCBaQ83PnxMUEaIdWwBd6QmlGSrCY1vqdfCeDXpsNQzJnjtOWEQotBJ9OVTXL07Qzgc7nTkWRaz23uwR40WBetJq5wZNJ9hEZD7OtCwn1s7d3Ssz9T9Sh/1H9S/V2n+0TOvh0Il4Kypz2XLxHXg22r5M8nsve6VK2vmXKoEcJ7DlX0K3GDi2w+MKST9tJ79vrIOD2h50kkUg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DBBPR08MB6188.eurprd08.prod.outlook.com (2603:10a6:10:1f6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.33; Mon, 24 Apr 2023 09:43:22 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::b630:c4eb:fba3:1158]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::b630:c4eb:fba3:1158%6]) with mapi id 15.20.6319.033; Mon, 24 Apr 2023 09:43:21 +0000 From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, den@virtuozzo.com, stefanha@redhat.com, vsementsov@yandex-team.ru, kwolf@redhat.com, hreitz@redhat.com Subject: [PATCH v4 2/5] parallels: Split image leak handling to separate check and fix helpers Date: Mon, 24 Apr 2023 11:43:06 +0200 Message-Id: <20230424094309.197969-3-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230424094309.197969-1-alexander.ivanov@virtuozzo.com> References: <20230424094309.197969-1-alexander.ivanov@virtuozzo.com> X-ClientProxiedBy: VI1PR07CA0247.eurprd07.prod.outlook.com (2603:10a6:803:b4::14) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DBBPR08MB6188:EE_ X-MS-Office365-Filtering-Correlation-Id: f0d96bed-453c-4fe9-3c7e-08db44a8574a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 1If2CrlnDSb6eZgZG8BV26gts6kAm/EXEYk6LKuW/1vHpbLo7bBxStVuu0S/4Kd4UmsqVMa4ypmUta8glz5K+o32P2r54Xkz5v5Y2GWpzcgvNElaqHuFp+Al1jCpl6vCxDJ8H6dn8q4EOQA3c3w6HBJL7U0dBTZ8jMUAKNjq7u1FyRs8+L3skfqY4xiJ6pnvh/DV0jd9XvKGmcgjKmjkNi+9w3CLX40q8hmsgdlNK9sJ/asuhkCUZzrsxXXMJIWgNcntaQeqJr4mxAWAabr138lvrunNhYmL0ZWmS0/UEG6lDbFkmfy3EVJ2zMcRf/JNls+TVOXl54BJnwZAPlpxCdsvE3/d4ZUyKJj/uVYIE/5VDmrqrsPI72PE6uRZ3iwxd6qy2Z7mbUxGCPt+ubGEtnZoT+Z6y2j0ZQJDHrlvn6ZMSXSollGkmJxpYq7qyeWUOSM4lxzAY+iaTvoeLgilNYlw2rycE0FMzcz/G31Y88O6Z67WAWxXifCFoCMMhKegS3iBdKpoEDHMXSnEBC6Arzlk0+OOnjIvyHg8JF62Nqkq0AyfA5pkpxJNRq7zHLGdaUJmq64JTHvCpW9y76sgRwP3wOQAlLE6iYV5Wyf+OTVuQMxqrEbx5W2XmXJZ/Sfp X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(136003)(39850400004)(366004)(376002)(346002)(396003)(451199021)(2906002)(66476007)(66556008)(66946007)(6916009)(316002)(4326008)(44832011)(8676002)(8936002)(5660300002)(41300700001)(36756003)(86362001)(6512007)(26005)(186003)(1076003)(38100700002)(38350700002)(478600001)(52116002)(6486002)(6666004)(83380400001)(2616005)(6506007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: q2SEexxx0fzMSOMHwSxpXOXmlE9JNcjWGoERgElHjid4A1pG3n1GVefwVggxJBqUCNtfXR3VtJcbr5LrSBjsl9igMYK2PBxA8mfOu0O5ktXOQI1oPXBASijGsLKHbFhfi2lGyj6cdVbg6bRvqDgbKjwnUDicX9SSvEF+ArbgKizn2fXH98GuzAsvM+PUtbVif4P0lNwwBunNrdgAwZkOIFWrwAwhOGMrQo0GZsuecPEVdUsKOeFmdJKGqin/GtrSBLeK5AKPQkr2Bc9KRBkOZKlH1U3AErC107bSAAIp3PaQ72GuijvxaxE/fgep/JNxN218CfGvcV4LGXKtPh5Mb8g3Pv26uEsBtxId+fjGKJK8Kmgmw2+z+OSuX3TuLsHqWOS6nLYXe8e5VOhaRWzKz5ZqVFTxVQQ0KltOxqLB1AsKdqmfkp0LIFZVugAEkdjq7h1wcnEKOo4+PETkYyf6ceCfLGj0owedTB++30FGjkuIyvDEaUa2O78XiZipPgMcCFOlpFlRWbCbHhalQo2/chgRhotL7NmXi4Fk5kaVatwtIqhpu1rEdqGoQmju2Sh0ZVOtzsPr3x6BTrHv+NFquZ75w7NI0PeHkNV3cT+b4ZtgwrKFQKzD+VEC8fNEgKhfMaS2mT8mrlQXi5tkgkHxXYGY0QWWnwVSmpuWYzG/kUclISwV/GeB9gt8Fw5WPXCVEavwCINvvxmnJnFwdqRY+y+UlpdiUdjqC0drHgv7ScbxdOpwbTarIx4H//C/3c4becXO4t4pUyfYpiN9gDtML8VjUrvgz9KgDiKv4ffMToQZ8vwllTW/wf6NGIbHq3wEOA1X1uUB2b6+jMcSI/zGRGM0KG4N0HgT3gLNvpKMoSGm/Ev4QzMi8N4huXRhxKEGSAJHW0XBABj4kEG9gF6BS8jh7RxCiYswHAc9bUxuV1Hd6t7z7Jv3D640u44BY37CD3ctjW5NW9jdSTSnjPdESsBo2jhKNvR8PYT3igWhjbZp6vzYh2WOtwX1WV0q3czgAlhcvumHY8X4Op4KW0MJc/skdQHeEInKU2yoQVxhmcYsQZFReNbq8eInj8IdZ6WZEMfW1sESjNCb/Hc/Kl7lKGWONcAI6df/9yscVKNgp1OktbHTEHspJSawkxJe/YxfM+FExagLSTS3I8iIh7pe524eIhwo4hG/UJ9Li4R2OYlJAUxwtYAVh4YrCwdeHcOpt/nXg/cWwj9UMJ4T7UWoScOCft+QpM6i6oQ4xE6Voqgyap3dBK/mcH+9cdC5At6pnCBTTVvNLg61TaKnP/q2kMIP2Ht5a/CfYWT3UfSIlPSSrwaw7jXAtzjbUaqCTQ1Sv5wdRwy42ilmVYSItYLXTDI0hy0RoFX4GBf1wRHbUWI1vJddQUJM1QEhyMYensoQ2CBrBwuRALltTAghLkTUqCpQOqp04JIG3xj8Yca6H8Dv8nh18GJZ9o7H1VqABM0lM+kqVvJ95YJfdnbyQJVkFIKdFJQ+s+Jd4J9zuInCWkWs7dpYaUukkgORVFGzTMbA0+YMhR2zzi8NRgvhEUqccZbdV8Pty+6oFdY2PhXnxsAWLQUYIv1vYASxe1nTUfdzLzWaJEHE0giqfbGrplR3Qw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f0d96bed-453c-4fe9-3c7e-08db44a8574a X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2023 09:43:21.9328 (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: upaUVgUHKT6C1Dt+X6X5n4WtviuTXLB41M+wXpNSB9o6jLjaMJNlchxXSly3PXGApT8zGGpx38VHz478LeJhooSg4dly5HxAacnn6Hk+JhE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6188 Received-SPF: pass client-ip=2a01:111:f400:7e1a::723; envelope-from=alexander.ivanov@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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org We need to fix leak after deduplication in the next patch. Move leak fixing to a separate helper parallels_fix_leak() and add parallels_get_leak_size() helper wich used in parallels_fix_leak() and parallels_check_leak(). Signed-off-by: Alexander Ivanov --- block/parallels.c | 86 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 61 insertions(+), 25 deletions(-) diff --git a/block/parallels.c b/block/parallels.c index 60033c1204..ec89ed894b 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -482,43 +482,79 @@ parallels_check_outside_image(BlockDriverState *bs, BdrvCheckResult *res, return 0; } +static int64_t parallels_get_leak_size(BlockDriverState *bs, + BdrvCheckResult *res) +{ + int64_t size; + + size = bdrv_getlength(bs->file->bs); + if (size < 0) { + return size; + } + + /* + * Before any usage of this function, image_end_offset has to be set to the + * the highest offset in the BAT, excluding out-of-image offsets. + */ + assert(size >= res->image_end_offset); + + return size - res->image_end_offset; +} + +static int parallels_fix_leak(BlockDriverState *bs, + BdrvCheckResult *res) +{ + Error *local_err = NULL; + int64_t size; + int ret; + + size = parallels_get_leak_size(bs, res); + if (size <= 0) { + return size; + } + + /* + * In order to really repair the image, we must shrink it. + * That means we have to pass exact=true. + */ + ret = bdrv_co_truncate(bs->file, res->image_end_offset, true, + PREALLOC_MODE_OFF, 0, &local_err); + if (ret < 0) { + error_report_err(local_err); + return ret; + } + + return 0; +} + static int coroutine_fn GRAPH_RDLOCK parallels_check_leak(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix) { BDRVParallelsState *s = bs->opaque; - int64_t size; + int64_t count, leak_size; int ret; - size = bdrv_getlength(bs->file->bs); - if (size < 0) { + leak_size = parallels_get_leak_size(bs, res); + if (leak_size < 0) { res->check_errors++; - return size; + return leak_size; + } + if (leak_size == 0) { + return 0; } - if (size > res->image_end_offset) { - int64_t count; - count = DIV_ROUND_UP(size - res->image_end_offset, s->cluster_size); - fprintf(stderr, "%s space leaked at the end of the image %" PRId64 "\n", - fix & BDRV_FIX_LEAKS ? "Repairing" : "ERROR", - size - res->image_end_offset); - res->leaks += count; - if (fix & BDRV_FIX_LEAKS) { - Error *local_err = NULL; + count = DIV_ROUND_UP(leak_size, s->cluster_size); + res->leaks += count; + fprintf(stderr, "%s space leaked at the end of the image %" PRId64 "\n", + fix & BDRV_FIX_LEAKS ? "Repairing" : "ERROR", leak_size); - /* - * In order to really repair the image, we must shrink it. - * That means we have to pass exact=true. - */ - ret = bdrv_co_truncate(bs->file, res->image_end_offset, true, - PREALLOC_MODE_OFF, 0, &local_err); - if (ret < 0) { - error_report_err(local_err); - res->check_errors++; - return ret; - } - res->leaks_fixed += count; + if (fix & BDRV_FIX_LEAKS) { + ret = parallels_fix_leak(bs, res); + if (ret < 0) { + return ret; } + res->leaks_fixed += count; } return 0; From patchwork Mon Apr 24 09:43:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Ivanov X-Patchwork-Id: 1772786 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=MPWzuuIZ; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Q4gGp4pP0z23hs for ; Mon, 24 Apr 2023 19:45:22 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pqsjd-00041D-U6; Mon, 24 Apr 2023 05:43:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pqsjN-0003vb-0y; Mon, 24 Apr 2023 05:43:38 -0400 Received: from mail-db8eur05on20723.outbound.protection.outlook.com ([2a01:111:f400:7e1a::723] 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 1pqsjK-0001KL-Sf; Mon, 24 Apr 2023 05:43:32 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JY+tVdmbeNoXm0a7diQDxgmAc4X418qC3sol7wAYZ0fHg/VKmr5XuI5h/ZQ1NK9o6iMlOcrhHpetkGaJs4jOg+tdPwOTr3gcpXF71ulyLfXAyRM/A1iMb/nfsIr+HKrMDv/CPEJD924fe6TFTp1XOXWiLThk2vkvbdzmFClewNQC4iwqHkLTXPRKQMmtwQf/gXwKpYEEX61AsYxV+bYsFnkK6shcW9MKykFX7mePUXW7AjV+Jg1eoVuZUWqUNt//szVkdqVJURAnmAY1tdUs19T9afdVWCv/y2gIF4GsxssjbpCk7GTsJSjIIgIQdoyH9lkHgMuk/cme60JtxxnoVw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=zvjgCXeWxk0xp5Byzd2O9mNaLa86cq3CK18VjqIBo+w=; b=gL6u89Zz09IClkKjFkDnr31dfKL7LDKZTey8dP/WQlAeDnTNv/t+Il5UJn943kkVEzXSCQnSGn/BrI1DjTwmTWiUKjmQgjh4OJ8q1OsQG5ghPzKrFSxf8ntA1+Y1nM/LlZ3PHYrIPZOzVFdnCzaSkb/dQCdR31aH95NSPGkOvOaE2sz8W+/aqmLmnjbtH9BJSn5OtG8Vc7ztR/YcpPa1M2IQIV85KTs3PJazCBGDwOoMEB2zErH0MTs7H/B2Vc+CZW/3SH8HJ5Sul/vnva1SjgGwsAQpKdTxatiSNKQx38i1w4nr1huveUQlmLqtNcztydphiqKjzo4UtFU08JYIZw== 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=zvjgCXeWxk0xp5Byzd2O9mNaLa86cq3CK18VjqIBo+w=; b=MPWzuuIZs2tKHJJ4ZCuFsnDKNEVGt+U/7A9nbgPM7iSemFgDZkOTMDytAo/6KDEfMSG5N++O5WesmzAHXCJMyt7lGYSnTCGWcNYRcBEZIGHniNG9ayB++kT9RKB2bqCbuiklmOIVR+atAVhlrvWNiFBKjwqStL9KC3vFwDGsFMv9IQ3TiLek1o01pWLKLeMKmwtijdUOyMm5PpHi0angi/XsbOxCfpofeDBM/HnUIXwreu1ccwc1QRWnnrlR9F1k7g9AOy5bDvKD+PJg72+LlriMt1VfWmoRe5eNuBwaffNRQ4UWWwpB2XvB/rYgdnX0R2gGPiUARIEIn0xTX6MAlw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DBBPR08MB6188.eurprd08.prod.outlook.com (2603:10a6:10:1f6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.33; Mon, 24 Apr 2023 09:43:23 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::b630:c4eb:fba3:1158]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::b630:c4eb:fba3:1158%6]) with mapi id 15.20.6319.033; Mon, 24 Apr 2023 09:43:23 +0000 From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, den@virtuozzo.com, stefanha@redhat.com, vsementsov@yandex-team.ru, kwolf@redhat.com, hreitz@redhat.com Subject: [PATCH v4 3/5] parallels: Add checking and repairing duplicate offsets in BAT Date: Mon, 24 Apr 2023 11:43:07 +0200 Message-Id: <20230424094309.197969-4-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230424094309.197969-1-alexander.ivanov@virtuozzo.com> References: <20230424094309.197969-1-alexander.ivanov@virtuozzo.com> X-ClientProxiedBy: VI1PR07CA0247.eurprd07.prod.outlook.com (2603:10a6:803:b4::14) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DBBPR08MB6188:EE_ X-MS-Office365-Filtering-Correlation-Id: 8021f51a-8796-4aa6-4986-08db44a85868 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: cQy4smkv+G3PfohNhvIk73bz03AhtWCHKsKxaz4vxXaBa5pjJSWsb6Jzui3NwUm1QirDjY1b/h8Ry6qjok9JIYqUCQz2G5GFs5m+dSor8w576WxcKug4gyBG8HltcZgHgPTFBW6CqcMOIyaza2Woj3BrrpRKy5eDctpkdc/fl6Im/K+7VuosShT/ecd8QJowYegKr5zQV4e+zs076iD1nN7jtmccWNDXx4bvu+hHPJuhkKxW7Zpl+SEqZpBWsGtzoqkk5CsK43+B3gkjQ2WcgRDEfY5uRKSLgRUNXaHCnHeC2kLTv6pdmnxWZiWb+xwi56cF1fhT0/OQpYK5F8sbAJhOYDkIZAwKHeLBrot63nYlFTFWa0SguqjxBn3r4yVZpuGLy1dKCrufLpAkYETmWCDaT2H7SPnmI41fAnfAinF+8hd3keqT/2+ZD2GWbH9gq2LDo1pXvmRqGt56Qji6I7Ku69jqzrS5xdJxy9vvthTnkgeNOAWWKLcp6y3UQPNZDShEc8HZNW6amzyhE3UxgZEdrhciLt3tMq+shTudMi4UIb1GLMDnw1RtCrHnaYrN25puJh/eTSK1UZudaP3QIcJxoKzTCA2EHvz+/xY3RrBjJ/rV86yWlZAv4txSge3x X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(136003)(39850400004)(366004)(376002)(346002)(396003)(451199021)(2906002)(66476007)(66556008)(66946007)(6916009)(316002)(4326008)(44832011)(8676002)(8936002)(5660300002)(41300700001)(36756003)(86362001)(6512007)(26005)(186003)(1076003)(38100700002)(38350700002)(478600001)(52116002)(6486002)(6666004)(83380400001)(2616005)(6506007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: zCE3MAlTEPWNwYbfSpa9tuUaqoT5VXdttHsEvooJG3aHlovJ58rJAb8avNCOl50I5mZ4YlqcXec2+k6eT6ReYBWceWJ8BFfCMvh93tljdmHivgct3FRWyI3UomR2eae73T9bB65mKhoTFfTnTtqgKoxaNEWGc6NY09NO+M+k06Qjtzsfod3EzBolr1bGbYLDJHRIZWLOJ7/9oC1LF4aIm24Qnfy8ZYn+XFCCVLXeWCv0avqmpwp0vD+h6y8h0cnlbbEU9G2IF6kAB0PVM2kx5MV3Oiv1b0ux48mQIQVaSeXZGhZIu55j1i59dbq39lMUKQoCePwLyPv/7zZuHMmWkp2gHFnZQKimYgMHI5Uq8KdwdachyghcOwMwqf+FaQAjJTzumi363yzjoJ1lO1mGIgf+TNMt9qU6kXBkJacSQwxLp9ScwV1cfolXsTUkt6F64BblLqz7rqVqUlQ0T9SFW6iuREOSjc0hl8TZJ5knDOINUPA5O1an8amB42ivuN6tEwHF3B6LaYCZgKaM3kBQXnn7Vj4AdFZgV204CeGCt74R9DJTDy19Ka/6NI0OEtr9Wx3F/ba4ghi5lRN+MQN4HLjc8VaMQRNLtHz2i6Fa3PSTCL0ztHMkfH5aByB9mUbtRrsSOMRj3TGyOcKvFc05hN9TX6Tm1B84BISthl6BbNgj1chnhaQVJ2Y2tB2rLLVO2YUyfefeIPW/hxLKB71vHFIEL013RUUESv9k04gnWWOLRT5iOtSAWztH/xKUeRrKyqLxU1JutvgacFuddj7pNjv91bLY/Z2ZNdJY1K8dxQXR2jBowYOfLugx37uMB2JKRwcwpi/1UoJCmAqOpsgXY6noMa/Ogmjg7Xei4gbBPybpVRzKPPsE9mpqoSkXgC30ev4RfdtznarDrEZzlHzNLqyhZTKKrApJAsnDRHP9c8pNW6nXtFsrhio4Vxx7X/7KExcKNx6pS95RwH0+vG3G8RzVeuHBVLCBQXoJzdo/0CX5ID2dChBG9tbz0EdNVnRji+dYVbBbI/Isl+fzd6N3gGRTXrGauQm0mG+pB8wsU+wSv+RZtaLeFwo3C7+Rr7gr4aZ4rcr/+T0hPRbEbaC1AIJ1S0TRbZXClXR+AXV1UxSiTtC/EhLUQ1EkVHmXQDPd1Ms9Wv3jjUUZHmX0QXB2Ypm0PzozpoRj3+yTVWA6dIN7b+ESttH3pRyvQpPZ3V83sAqOpYEgQNVNMSMx+I5+cHe1gPLBye6B+KXV0i4E9N4VMtAGxKqJORWlMZogYv1Wm6fQEuZvKUsRueT6+aAKFCy8p/BXBAZT7X0JCJIOUp9iafZ1dGi5sfHtwsFa84zSANT0zcy9xfx5/cibtStD6t2FuKdsP+eNwNAiP/CSLiNpjF0qQcdf/GoxdDHuCTmq7LOoHzSuIB2oZC9K0GnhRRtV2XMFxh6YVCt6Pfn3noI4uCubzp0nOKgVxCYWJWz1UxrK8mfFrFyLp43J5faxkM4gaaEhvPEJSzrvWRqVUjFe/AT2mg8djOzt1rZrr7rRVrzgC/HY8jYWt3cw92pBJuLNUtKANg5AQy7p73FO6F7KAY6X6i8VWVfQNmZkIKSogCVqtx/mgzagyZakEaV6Bg== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8021f51a-8796-4aa6-4986-08db44a85868 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2023 09:43:23.2722 (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: ntSkiiPpQrm5pBEXZoZbz3nuKaFeYiEQkb/zKqg4/T+orJ2G3p85KedOIUvQOt/cWiiNqT31B05Yed820CQWaI2roZfdb49Yaw1OxYlrtVc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6188 Received-SPF: pass client-ip=2a01:111:f400:7e1a::723; envelope-from=alexander.ivanov@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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Cluster offsets must be unique among all the BAT entries. Find duplicate offsets in the BAT and fix it by copying the content of the relevant cluster to a newly allocated cluster and set the new cluster offset to the duplicated entry. Add host_cluster_index() helper to deduplicate the code. Move parallels_fix_leak() call to parallels_co_check() to fix both types of leak: real corruption and a leak produced by allocate_clusters() during deduplication. Signed-off-by: Alexander Ivanov --- block/parallels.c | 134 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 129 insertions(+), 5 deletions(-) diff --git a/block/parallels.c b/block/parallels.c index ec89ed894b..3b992e8173 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -136,6 +136,12 @@ static int cluster_remainder(BDRVParallelsState *s, int64_t sector_num, return MIN(nb_sectors, ret); } +static uint32_t host_cluster_index(BDRVParallelsState *s, int64_t off) +{ + off -= s->header->data_off << BDRV_SECTOR_BITS; + return off / s->cluster_size; +} + static int64_t block_status(BDRVParallelsState *s, int64_t sector_num, int nb_sectors, int *pnum) { @@ -533,7 +539,6 @@ parallels_check_leak(BlockDriverState *bs, BdrvCheckResult *res, { BDRVParallelsState *s = bs->opaque; int64_t count, leak_size; - int ret; leak_size = parallels_get_leak_size(bs, res); if (leak_size < 0) { @@ -550,16 +555,123 @@ parallels_check_leak(BlockDriverState *bs, BdrvCheckResult *res, fix & BDRV_FIX_LEAKS ? "Repairing" : "ERROR", leak_size); if (fix & BDRV_FIX_LEAKS) { - ret = parallels_fix_leak(bs, res); - if (ret < 0) { - return ret; - } res->leaks_fixed += count; } return 0; } +static int parallels_check_duplicate(BlockDriverState *bs, + BdrvCheckResult *res, + BdrvCheckMode *fix) +{ + BDRVParallelsState *s = bs->opaque; + QEMUIOVector qiov; + int64_t off, sector; + unsigned long *bitmap; + uint32_t i, bitmap_size, cluster_index; + int n, ret = 0; + uint64_t *buf = NULL; + + /* + * Create a bitmap of used clusters. + * If a bit is set, there is a BAT entry pointing to this cluster. + * Loop through the BAT entries, check bits relevant to an entry offset. + * If bit is set, this entry is duplicated. Otherwise set the bit. + * + * We shouldn't worry about newly allocated clusters outside the image + * because they are created higher then any existing cluster pointed by + * a BAT entry. + */ + bitmap_size = host_cluster_index(s, res->image_end_offset); + bitmap = bitmap_new(bitmap_size); + + buf = qemu_memalign(4096, s->cluster_size); + qemu_iovec_init(&qiov, 0); + qemu_iovec_add(&qiov, buf, s->cluster_size); + + for (i = 0; i < s->bat_size; i++) { + off = bat2sect(s, i) << BDRV_SECTOR_BITS; + if (off == 0) { + continue; + } + + cluster_index = host_cluster_index(s, off); + if (test_bit(cluster_index, bitmap)) { + /* this cluster duplicates another one */ + fprintf(stderr, + "%s duplicate offset in BAT entry %u\n", + *fix & BDRV_FIX_ERRORS ? "Repairing" : "ERROR", i); + + res->corruptions++; + + if (*fix & BDRV_FIX_ERRORS) { + /* + * Reset the entry and allocate a new cluster + * for the relevant guest offset. In this way we let + * the lower layer to place the new cluster properly. + * Copy the original cluster to the allocated one. + */ + parallels_set_bat_entry(s, i, 0); + + ret = bdrv_co_pread(bs->file, off, s->cluster_size, buf, 0); + if (ret < 0) { + res->check_errors++; + goto out; + } + + sector = (i * s->cluster_size) >> BDRV_SECTOR_BITS; + sector = allocate_clusters(bs, sector, s->tracks, &n); + if (sector < 0) { + res->check_errors++; + ret = sector; + goto out; + } + off = sector << BDRV_SECTOR_BITS; + + ret = bdrv_co_pwritev(bs->file, off, s->cluster_size, &qiov, 0); + if (ret < 0) { + res->check_errors++; + goto out; + } + + if (off + s->cluster_size > res->image_end_offset) { + res->image_end_offset = off + s->cluster_size; + } + + /* + * In the future allocate_cluster() will reuse holed offsets + * inside the image. Keep the used clusters bitmap content + * consistent for the new allocated clusters too. + * + * Note, clusters allocated outside the current image are not + * considered, and the bitmap size doesn't change. + */ + cluster_index = host_cluster_index(s, off); + if (cluster_index < bitmap_size) { + bitmap_set(bitmap, cluster_index, 1); + } + + /* + * When new clusters are allocated, file size increases by + * 128 Mb blocks. We need to truncate the file to the right + * size. Let the leak fix code make its job. + */ + *fix |= BDRV_FIX_LEAKS; + res->corruptions_fixed++; + } + } else { + bitmap_set(bitmap, cluster_index, 1); + } + } + +out: + qemu_iovec_destroy(&qiov); + g_free(buf); + g_free(bitmap); + return ret; +} + static void parallels_collect_statistics(BlockDriverState *bs, BdrvCheckResult *res, BdrvCheckMode fix) @@ -611,7 +723,19 @@ parallels_co_check(BlockDriverState *bs, BdrvCheckResult *res, return ret; } + ret = parallels_check_duplicate(bs, res, &fix); + if (ret < 0) { + return ret; + } + parallels_collect_statistics(bs, res, fix); + + if (fix & BDRV_FIX_LEAKS) { + ret = parallels_fix_leak(bs, res); + if (ret < 0) { + return ret; + } + } } ret = bdrv_co_flush(bs); From patchwork Mon Apr 24 09:43:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Ivanov X-Patchwork-Id: 1772782 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=ugX/rSIF; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Q4gGL2x7Nz23td for ; Mon, 24 Apr 2023 19:44:58 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pqsjb-0003yY-HJ; Mon, 24 Apr 2023 05:43:47 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pqsjP-0003vi-9G; Mon, 24 Apr 2023 05:43:38 -0400 Received: from mail-db8eur05on20723.outbound.protection.outlook.com ([2a01:111:f400:7e1a::723] 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 1pqsjN-0001KL-OO; Mon, 24 Apr 2023 05:43:35 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=K7Gfx+zP7redhH3g9hbcAwXeKIQHTDYBdj/VpyDrsZ8CeL1EhbCw+c2HbLaeCBzDs6Ik9aNgJgay73Qw9/dulBS/IIz9+pH/mRtvLU1PIB0mhuCIWKWAmKPFujNB4J/cOXfjYftiZOh2dC731EvBIWxOjPcZSnmASPwopWheeSQCprTt8K8/5xhD0ibFAlsXDFonUCDdkV5oNyGFtFOlQ0fM+9tZldJZbvFxlIk1EcFCq0JwefZsX4YuMwtIYzPLTLgCpYJSBDCjVaSKmVFBxG+0cr3vAx/5RDh8KZFCyX0pB9AAUyFbcHQrZ+6t7bfLqH7hVTfAeyVZahwEzFOCog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=TVvXahkekOwOWj8uJ0Xb/gYw/NV8Ny8iv/8izjHk9zM=; b=nYqS9DGCUWBgCJY6jZtdH4ij+5uQmxrayvzEcOrNpvrubYBn0Uuk6FhSYNYVTLTx7JqSH1EQ9QewzoeA1BoIM/4KUImFF18XomMrwK7bWqrmjsYBtSpzBvRrVTlzbFmBo2bVARfYiDrBLeuwzE00XgQu2qtKW+D9VHJ7g2ar/LGQ1vg/QTpBGgHeqEJlb/1BPZdMhFHpZwE+fCkYLU2Bc7J///8/jx97vpiamWExKhLUAhpW/x01gilBuA52NZ+iXO1K1KST652xwKDUZ9JHAue/gXBaqso8NTppTexJ6HCrzZtpxS4NDrhjZjV5va9QiX01+XAtvbw5HcXiKu5GWg== 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=TVvXahkekOwOWj8uJ0Xb/gYw/NV8Ny8iv/8izjHk9zM=; b=ugX/rSIFkamI8mt9Ukn3P3Ez0ZpwktmwPZGtUE1iqKAEgQWZSouRTSr9p/eKFLeqsNdSTRxhqiuq7Dl6Kad3ZRtM1CcrtMl9nKbVs+Tm//xpgoQdOpuXYxBm5U2lv89bBmDn9C1XtqOz+inb1hce7ozxddo/ObnUNXvXJOSqim+xWwSzqbKEUVJTFoGG4UfUJ6Nx9JgY18H1rbZLZktl8Ew66QWYR3SjtqO+GTrF3GuwaJUIt5ZVnaRTJVF4/eKg7/Fhi7eZjWljQfbWbVuv19yZzkOvRe7Fg+kUKQTkZbRXLYBqRiGLs+v6AtOE2djPKDFKuq9nQhKjG+Nt8PA4uA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DBBPR08MB6188.eurprd08.prod.outlook.com (2603:10a6:10:1f6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.33; Mon, 24 Apr 2023 09:43:25 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::b630:c4eb:fba3:1158]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::b630:c4eb:fba3:1158%6]) with mapi id 15.20.6319.033; Mon, 24 Apr 2023 09:43:24 +0000 From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, den@virtuozzo.com, stefanha@redhat.com, vsementsov@yandex-team.ru, kwolf@redhat.com, hreitz@redhat.com Subject: [PATCH v4 4/5] parallels: Replace fprintf by qemu_log in check Date: Mon, 24 Apr 2023 11:43:08 +0200 Message-Id: <20230424094309.197969-5-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230424094309.197969-1-alexander.ivanov@virtuozzo.com> References: <20230424094309.197969-1-alexander.ivanov@virtuozzo.com> X-ClientProxiedBy: VI1PR07CA0247.eurprd07.prod.outlook.com (2603:10a6:803:b4::14) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DBBPR08MB6188:EE_ X-MS-Office365-Filtering-Correlation-Id: 0d4e7e76-747a-4be4-32a3-08db44a85960 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uOBdeXBK93cZ3BzNaLcG0ujpR2dmMK4F3t7aKj9e5ldZSCTwkbbfR1cWjcnr13gtsoeFcPuoPq66FSwAun7BMsBt8/ggTQdgVVe7aK3LGh/2dUI/1Lx6qBN3ZKOtmX21JbUdaG1zpnZ2SArqeMdQePHEvOjsVBZutwfgQkwr0SxgXGjSFuZn6kfkCCV4SyjINi+lYAkpbNoYUBjR02fC2mC0O9g6DprSKyOeWJxhOGvsjUfWWU7Ca1uyDztCngKihmFlDJZfypPmXa0o8dM5p3KGoVkrGR7ScosgGDEz868o2bF/5Pm4v+0OnGQSv0tJ5Enm+SXASain+70A1T+Y5CdHXPwVMvrXNEVrUjf/5vxZBRdynpGPGX+GDsNvWaJ1L8+M5eB9wZ96LbebnC8LR7q8XgI0rqS5KAvEmwHr9YH6I1u2baci+qIt4Vx4GjIfot2dyyMIw1AbyrzZBprXvkjdK4ASCurIJqRqIOyxP58SKtkxLLbPDJAnzwzxuRTdr7wGxEH/TWu9EjyHgYk0QmDpP/9mChUtzTQ2lvztOTfbpco601ZkZF0Zj6JKZVgfn4+E9+qQ8nwPAtYDeo6JSzatVAbrv6aznIAKtGtD8j/WJNBNIa58EsxmnnGe924M X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(136003)(39850400004)(366004)(376002)(346002)(396003)(451199021)(2906002)(66476007)(66556008)(66946007)(6916009)(316002)(4326008)(44832011)(8676002)(8936002)(5660300002)(41300700001)(36756003)(86362001)(6512007)(26005)(186003)(1076003)(38100700002)(38350700002)(478600001)(52116002)(6486002)(6666004)(83380400001)(2616005)(6506007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Oh38SKilhjJx9hXLpk3S0Uci31oxdVVu57i74M8rVuoWbbR1rWN0Y2WV636JgE1t/8jTs5jYgergYpS6qYZvO49K3Qt08yfTqqBiIZed5KNB/D3UNwnsxqIiOLE6EgyH1tGloZ2dT177vRgbpaOBs8Ew7M9kxc8O7QMpveidllMkaGjAMAtcu5N+KHRzdtBfwykke+bOfxgWLhrnJiTWlNgnhAOa/IHfROrgvCkw8iGSsxJtXgmBJI8Sme/Kf6DM6EjoKigLuCzxjilWWrSPiRq5TrOpv/86LHT5aE5N2qhPextZvry16i+WZyZRRGvpqEt0udEAKJKfF/EXcsukh8LqJWT0q+057107dVq33sxJ8Kv15/4vr+nrgyUjNk/zB9QTjdZDK4ekyLutsb8WEm+SNnZzZuSINF6p+oS0CgRajCW5J39txdeGQT5b2qJqhAI2veXeyXQmW9YyDPwARvYvEdFtdq4TZsvgR9sKGL9FQmatEhoKkNkd1DWHsj4q6kkDNDLDGkEpKlvkqrzarCwR8/QG7uHVAaWyXi4Ia0QWEGlajIxuihoXB2nuXdzm2t77ePD/f/UForYevpzGop+Drn3RhzO7A9QXsGQu4rjDwxd9C8mPmQ7Ek7gl4XEin9qXPBCaH8BznFU1DDtwAaKqQKIFVwm45wXaKsj/2mRa/Cu9BRvdsFLk5sevb7X6Y2XGdIgn/2MXU9RQiVhPZvMy4RmOpPwWlpnz1xGJ0mP3A8AjtPQc6YGMXO9yhSwkrzcvoQc6Sm8MjvRj+1uaIQDOYdSU74ZtpuTx6MgTKfWUc7MQ/nzQsPGTfGHjFXcx5Z9JNChpdQVveJmHwHJ7JJIcxSlUoBEE1tCN7hTyeh06jomORP64aoE1G4o2TSEOLDJX6Lv+yTf/zeWu4XipvQ1YJmL73ghZsgou3iDtt6DyAaHrMXZGF86Rm757P2ld9HI+Pd0d+3SokxLrhkq1i1ylPgNajIFYv+YAfGmc8LrJ2iuy1Rs4aDgaNg5EBudV/zyiII+dZJJA7WSZP5jBiQq9CvnmBcWm4MQ1CuF0u3JRumdHU4/tMnawixj5UNmXuyxSd306W5AQTZdM+GNTPqxsnt8QMeRIrffDA5p8Gql3vrOhzFbTCtLWdA8JNWJ+2dHQcEcsD1+FOEUR4xdxcZqq91UjSxEJRQVVI9brl3FiUvdaQgSfKf2KjI9rSZLsUMNKrLjMzWOWTlNXVqosPF3ZUDu9L3D9tekK42a9leThI3gV7OCO9yHzllZB1QhRpd2zMVTWaWj3RLcoZx7KcSDTbBhuDhDZCRDE3UrEFW1yMB4b8bFN0sAOrgL/8S141vZXCE2BschM7hn515FoYDhwO+agKQkGNZMi3xExSXi3zRnC0beGzmRVlLc42CYF/7hPW2l9AMD/aLv32ct4npIayygQWLEGHl46VmHxxmrh0eURL0hMXfnc47bQ00P0i5CdHl5ctQHDffaaiheWMG9P2jyK3pbGWombP/A7+UHX9aDsdMwUfTSoiKYZIDv0RGC9e46VLnBnSk94vpRb8rG1PwJNa8WOx8nHKxTwktY7JeQF6ORipUoKUQADnakgjnVGgdtXtMmFC8aA6rifkQ== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0d4e7e76-747a-4be4-32a3-08db44a85960 X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2023 09:43:24.9192 (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: yMJmh63dH7NbDfmemg0QeudXwHoS/u+5oClYbdtVFlQFXB8ftEtZVP+Rbjk2o3yayQZrRsI3csrdWRT8Ag0dDyWfcPULK68qztqpUk9dWx8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6188 Received-SPF: pass client-ip=2a01:111:f400:7e1a::723; envelope-from=alexander.ivanov@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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org If the check is called during normal work, tracking of the check must be present in VM logs to have some clues if something going wrong with user's data. Signed-off-by: Alexander Ivanov Reviewed-by: Denis V. Lunev --- block/parallels.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/block/parallels.c b/block/parallels.c index 3b992e8173..5dc56ca36b 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -42,6 +42,7 @@ #include "qemu/bswap.h" #include "qemu/bitmap.h" #include "qemu/memalign.h" +#include "qemu/log-for-trace.h" #include "migration/blocker.h" #include "parallels.h" @@ -436,8 +437,8 @@ static void parallels_check_unclean(BlockDriverState *bs, return; } - fprintf(stderr, "%s image was not closed correctly\n", - fix & BDRV_FIX_ERRORS ? "Repairing" : "ERROR"); + qemu_log("%s image was not closed correctly\n", + fix & BDRV_FIX_ERRORS ? "Repairing" : "ERROR"); res->corruptions++; if (fix & BDRV_FIX_ERRORS) { /* parallels_close will do the job right */ @@ -464,8 +465,8 @@ parallels_check_outside_image(BlockDriverState *bs, BdrvCheckResult *res, for (i = 0; i < s->bat_size; i++) { off = bat2sect(s, i) << BDRV_SECTOR_BITS; if (off + s->cluster_size > size) { - fprintf(stderr, "%s cluster %u is outside image\n", - fix & BDRV_FIX_ERRORS ? "Repairing" : "ERROR", i); + qemu_log("%s cluster %u is outside image\n", + fix & BDRV_FIX_ERRORS ? "Repairing" : "ERROR", i); res->corruptions++; if (fix & BDRV_FIX_ERRORS) { parallels_set_bat_entry(s, i, 0); @@ -551,8 +552,8 @@ parallels_check_leak(BlockDriverState *bs, BdrvCheckResult *res, count = DIV_ROUND_UP(leak_size, s->cluster_size); res->leaks += count; - fprintf(stderr, "%s space leaked at the end of the image %" PRId64 "\n", - fix & BDRV_FIX_LEAKS ? "Repairing" : "ERROR", leak_size); + qemu_log("%s space leaked at the end of the image %" PRId64 "\n", + fix & BDRV_FIX_LEAKS ? "Repairing" : "ERROR", leak_size); if (fix & BDRV_FIX_LEAKS) { res->leaks_fixed += count; @@ -599,9 +600,8 @@ static int parallels_check_duplicate(BlockDriverState *bs, cluster_index = host_cluster_index(s, off); if (test_bit(cluster_index, bitmap)) { /* this cluster duplicates another one */ - fprintf(stderr, - "%s duplicate offset in BAT entry %u\n", - *fix & BDRV_FIX_ERRORS ? "Repairing" : "ERROR", i); + qemu_log("%s duplicate offset in BAT entry %u\n", + *fix & BDRV_FIX_ERRORS ? "Repairing" : "ERROR", i); res->corruptions++; From patchwork Mon Apr 24 09:43:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Ivanov X-Patchwork-Id: 1772783 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=virtuozzo.com header.i=@virtuozzo.com header.a=rsa-sha256 header.s=selector2 header.b=PEomkppK; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Q4gGN4bKQz23td for ; Mon, 24 Apr 2023 19:45:00 +1000 (AEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pqsje-00041v-Ow; Mon, 24 Apr 2023 05:43:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pqsjT-0003wY-0B; Mon, 24 Apr 2023 05:43:39 -0400 Received: from mail-db8eur05on20723.outbound.protection.outlook.com ([2a01:111:f400:7e1a::723] 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 1pqsjP-0001KL-Sb; Mon, 24 Apr 2023 05:43:37 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=nfY5dXNLmQ4lekzQ4HzhAr0TeFLoyTUoREvtJLuVncUoL86tuSPDGE/4nKwkfAOBRV80YlUtAvMEYtzLEKB+V3xNN2HtWWudPFHff35a+x45u8VTuttOvZQKjYtZmIyx+lEW2pwpI2DRQgNgpLApmtAd9+U4AWdYy9cEnC747lxoqaPlHu+ng4JN0W5pXfW93sxfF6b+Q3Qqh5j390GHM3ZzIdkl4ozLQgQZ1pCwYtCyzyzENGuVwshYgo9TdfK4OJA/mny+0fHCwGNnnTlUW+2HRo8s+frWm2eiUMBBinp1AUyRmuwxUbieGsrnDHv3w8pndqMZY1XRgUlWWgHg7w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=K4s/00F4HygINgCN0AuoerDN1fHTAqhnPBSWCTP7Zak=; b=biUzeimnlR2lxrzOgErOqAeCdj30NYBv4KEtKB+5u+dkp2EL1GVpJeKSsbDn7elRmcqXFDwApKM5nCv4iK8Z70MzdGNmzlAWt93fD0eTBUuDq66NNvGS7lfqkwIJYnlB2HYVlgiNeHSe54I0f9mBS+llv8dMjcIWSVOI0vcwSvWEs6Nti9rcZoI834BT36nKipxIoeR1zfpYTbWnMOO388Otk0j0DmZSwhWMnhLjk/lGmtpRx58U9hiLaG/lNZm6eShywb9dP2B8QBEGCgmST0nIlgvTfOTcMKOV90r7x2xt2Knn/m4ZKyuq10JuqUHiodYyY/75WIBC7NTrXK1Bxg== 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=K4s/00F4HygINgCN0AuoerDN1fHTAqhnPBSWCTP7Zak=; b=PEomkppK7iL+MhBG1xQNy9Cu2xZ6Bl5wHqDgwBjmDxhmpWyodlGg7pVj8Xl4Ezn////Pcb54MPKq8gWl7iTv3VYA6v2e9tiPMzuJeERl1DOQUXGFA8juYdFgCvF5iQi9O935PvM0zIs9mLP8Mp89+zbhJZD3MjUqkHaG8MDohfP7ZshqYfH1/8BWuYXb/Sh0QrevZRnBGE+uaV8CQB/d6shSAhRCfpuvHM/KvA3Q1IAHLtR1fnJbk2cwEPyCDOvJqVJXPtxVfK9jLrlcvaef7yD1D3nT+zanfxy8tU7kHxBIKhRPXwM/Hh6dzuc/ZGYB9Uvd+QlxtI8TdpyYO0/YJA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) by DBBPR08MB6188.eurprd08.prod.outlook.com (2603:10a6:10:1f6::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6319.33; Mon, 24 Apr 2023 09:43:27 +0000 Received: from AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::b630:c4eb:fba3:1158]) by AS8PR08MB7095.eurprd08.prod.outlook.com ([fe80::b630:c4eb:fba3:1158%6]) with mapi id 15.20.6319.033; Mon, 24 Apr 2023 09:43:27 +0000 From: Alexander Ivanov To: qemu-devel@nongnu.org Cc: qemu-block@nongnu.org, den@virtuozzo.com, stefanha@redhat.com, vsementsov@yandex-team.ru, kwolf@redhat.com, hreitz@redhat.com Subject: [PATCH v4 5/5] parallels: Image repairing in parallels_open() Date: Mon, 24 Apr 2023 11:43:09 +0200 Message-Id: <20230424094309.197969-6-alexander.ivanov@virtuozzo.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230424094309.197969-1-alexander.ivanov@virtuozzo.com> References: <20230424094309.197969-1-alexander.ivanov@virtuozzo.com> X-ClientProxiedBy: VI1PR07CA0247.eurprd07.prod.outlook.com (2603:10a6:803:b4::14) To AS8PR08MB7095.eurprd08.prod.outlook.com (2603:10a6:20b:402::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR08MB7095:EE_|DBBPR08MB6188:EE_ X-MS-Office365-Filtering-Correlation-Id: ad22b5f2-8fd9-4256-8d0b-08db44a85a8c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0M2y+1FfZcaazKLABPNZdYgkvF/vhY0l0zukdkIQ0zKL6YG/TxpmNEgmlxnUlQaA9SsYcG3hzRjJ/j+fQEgfcKeP0CfM/NKCgKnS4kVHWq4pSi3YjuuoquAvYgUeNREiMaHJaJ1ZYl8USohiSgUBnyxwiMDC12QLdDK4ZCC8rvIcCwb4vHXjiFPFVt7gvIrPf2swuPG+G3eciJdP022INP2vpw8NE142dr4VghrkCfVk3D5jMOtXF+cIqHJSeffPJRmphYAZMf4objBgFT/2sfP0T/5yDCIG0aZKWiKlsWjVVAIPStcSNHHE+F1N1gjZzzrtILvOKm/1Tsxl58L0cIdP9q/Cp0eig0KHYPp+LF+dhmvERBaoV8DfXcaBTrGBUvzEJ+WwGzLB1SmihWHASQ5DrGdPwCMhghichIizl7dNwuv8b+p/gjuo62ObyI587w2LwE1A0Cs0U0d5DmnBT7xxxLyfbbUt8O2JBReJKv6WA9iDi2DMO5OwionBqHyCcdIV05g4AwqUnpPneI5h2xw+gLzwYqvzjn3zvCtWhqwJ6dJWR02xnNyp4jP7PGB8OEMqjy2hpiUr/IVkuOE7X/VKXBxl5wQoS+t3hLwU1JpsN9SVvN4fpLNZRg9hKeMJ X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR08MB7095.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(136003)(39850400004)(366004)(376002)(346002)(396003)(451199021)(2906002)(66476007)(66556008)(66946007)(6916009)(316002)(4326008)(44832011)(8676002)(8936002)(5660300002)(41300700001)(36756003)(86362001)(6512007)(26005)(186003)(1076003)(38100700002)(38350700002)(478600001)(52116002)(6486002)(6666004)(83380400001)(2616005)(6506007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +Au57A5JCV+pWfbCtc3b34Bb+40VzXhhWmaaO1qLuvD+BGgpKfSNQPN2Iv44bnfElFUgWtIpgdllgZy8Qq5qN8qb9/n48LFYxLwuEjiGaPq9m9t5KlWfTGlZD/rbsfxvVSTxq4qNmvshGYycPnrI+Io17GJIhWCObWqJyBBT+5L42AESF+Po3KhwtLNV79tUKdzudiv8GyUgBW49SzyEwJs/n72nF9xiaUF2q0C8Ni5XDiaQy5VbZxb9o5zC5596vGD7QuXQuv6sZY5O5WaGx73XrF2MTdj9hNqkSuaqOYxXIVd1Gg9vZeBP4RefPTJLC06Q9F5idGdiwE4Lu7TbZ8yEToVgAbzh8RKsiB3GxA7TYSx7kL63bUvTB4X1hYYKcugVzYvtq9uF74SZ9RYxqPuJRlU4CpcdFPUGQ6wzeCwsEfUvq7pMWG5qJ+M8mw632sd6bAVr/0AZ+UYdY5WCpafr4rbPNQqdv2o6EjH7vx57jhjNOkuhOiZWfxlTXO4kdEiPR5KRXdE1PddL5Qdjz174F8OmaUJBJJ0ULaoSOFJ94etaStpjtK2Jsltc4OyRREyLFZALcgoFCk36W7J1RwkN3GgeEA0seGpKNkpdJvaMXidnJxAENVr/+KEyxKSSiEuqGFy0WEVR2HhZo0W5HQaPMT0YsOYTGD5gTTOXFpMr55f+55y4syqFCYJZ+RGTFKy5owU58tg3jS6bGM71dJsxIz0zdrRXLMISsYNFUnlHYYhdenB/HDqDMcTN5RgjvtRD6/IEwmI62oESibgU0RkrWp7I4fu1BQwQngxs92ONKlBt7n2VkxlmUbWAciPnu505yYm3+LJxVkiEEsR3oTUWORz0svnGPpZZd6Gga+U9u+jbtTLF4DzhNKcI09/8YMLfdSVdETeVL2qJ85CLgkovJoDzpcCrol+p1LjVJnfJQG4ZuRiarHTNwJU7swfvTPsa4Ua8OjjWwmoTBxXfbeH/wHr4E/N3yiVA7tJ8v8F5PkNn2Y8/n8tgMPWXUeC084iBjEkMwMMhrYNJ+WFeNHYuyk/KyA94lZisBbjpU0jAz19I5ep24bj5rH0VmLf9CD3cJNvJ/nfsMWGZxaOuo0G6/0on4l0dURVHnC5M9+ya/ETO8yoP9yI77O32Ii4T7T8FNF3pI0pT0GcxoVV493ABCO/XpdMu1rbEnqqfRN0K9RKfuV+XljO1RespQ4XbV62EKlHcrr4M3xohWUfvQUsoh2fZd7PwGxKph1mVfigfxcfzGHd7xvWnHfiICWAmlILQ9jRoy6zNmc023pGcM+prmzx0Rbkp8vl8jG6P1ZXHSClKX7+BUCdF9iUw6gKVPiYEEacnmCSa5SSqIMqnPNNIGC698q6qosAMjwiUC5oZZ1HG3EJU/hYyJBBD72C5ZQ9RvpORIDixiOV2N27Il14VQbe86LbC/tfYAoamE6RrcLdfAmpFhvL/3j5mleEbW4cOPveWQLWelPlvRHzhZbz8UboRKef5wLFTU08dy0hGTqdEqTyGSwTr7p+Z+lqprc9RAKMdogH2PdSVtFJuLY0JgIOahywEmrp4EXp6BktoGNfqoG7Zs4Ya5q9o+3gq+el/woakP1tEURdnx5lXdw== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad22b5f2-8fd9-4256-8d0b-08db44a85a8c X-MS-Exchange-CrossTenant-AuthSource: AS8PR08MB7095.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Apr 2023 09:43:27.0084 (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: LV6xJb1tN5VoRgtGYa980of2HJaxs+7sMvPmCA6ckblbPrwO4gtp0bU3RTGRi8ElbgX9UolzDq/vmjSEPiBnjKoS+VTpFUGdzLZ/VhFGvkE= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6188 Received-SPF: pass client-ip=2a01:111:f400:7e1a::723; envelope-from=alexander.ivanov@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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Repair an image at opening if the image is unclean or out-of-image corruption was detected. Signed-off-by: Alexander Ivanov --- block/parallels.c | 65 +++++++++++++++++++++++++---------------------- 1 file changed, 35 insertions(+), 30 deletions(-) diff --git a/block/parallels.c b/block/parallels.c index 5dc56ca36b..705869d89c 100644 --- a/block/parallels.c +++ b/block/parallels.c @@ -958,7 +958,7 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags, BDRVParallelsState *s = bs->opaque; ParallelsHeader ph; int ret, size, i; - int64_t file_nb_sectors; + int64_t file_nb_sectors, sector; QemuOpts *opts = NULL; Error *local_err = NULL; char *buf; @@ -1035,35 +1035,6 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags, } s->bat_bitmap = (uint32_t *)(s->header + 1); - for (i = 0; i < s->bat_size; i++) { - int64_t off = bat2sect(s, i); - if (off >= file_nb_sectors) { - if (flags & BDRV_O_CHECK) { - continue; - } - error_setg(errp, "parallels: Offset %" PRIi64 " in BAT[%d] entry " - "is larger than file size (%" PRIi64 ")", - off << BDRV_SECTOR_BITS, i, - file_nb_sectors << BDRV_SECTOR_BITS); - ret = -EINVAL; - goto fail; - } - if (off >= s->data_end) { - s->data_end = off + s->tracks; - } - } - - if (le32_to_cpu(ph.inuse) == HEADER_INUSE_MAGIC) { - /* Image was not closed correctly. The check is mandatory */ - s->header_unclean = true; - if ((flags & BDRV_O_RDWR) && !(flags & BDRV_O_CHECK)) { - error_setg(errp, "parallels: Image was not closed correctly; " - "cannot be opened read/write"); - ret = -EACCES; - goto fail; - } - } - opts = qemu_opts_create(¶llels_runtime_opts, NULL, 0, errp); if (!opts) { goto fail_options; @@ -1126,6 +1097,40 @@ static int parallels_open(BlockDriverState *bs, QDict *options, int flags, goto fail; } qemu_co_mutex_init(&s->lock); + + if (le32_to_cpu(ph.inuse) == HEADER_INUSE_MAGIC) { + s->header_unclean = true; + } + + for (i = 0; i < s->bat_size; i++) { + sector = bat2sect(s, i); + if (sector + s->tracks > s->data_end) { + s->data_end = sector + s->tracks; + } + } + + /* + * We don't repair the image here if it's opened for checks. Also we don't + * want to change inactive images and can't change readonly images. + */ + if ((flags & (BDRV_O_CHECK | BDRV_O_INACTIVE)) || !(flags & BDRV_O_RDWR)) { + return 0; + } + + /* + * Repair the image if it's dirty or + * out-of-image corruption was detected. + */ + if (s->data_end > file_nb_sectors || s->header_unclean) { + BdrvCheckResult res; + ret = bdrv_check(bs, &res, BDRV_FIX_ERRORS | BDRV_FIX_LEAKS); + if (ret < 0) { + error_free(s->migration_blocker); + error_setg_errno(errp, -ret, "Could not repair corrupted image"); + goto fail; + } + } + return 0; fail_format: