From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 1D9A2802A5 for ; Tue, 6 Oct 2026 14:47:25 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 696Ek8He025456; Tue, 6 Oct 2026 17:46:09 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 696Ek8He025456 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="wIN6GAYr" Received: from mail-yx1-f71.google.com (mail-yx1-f71.google.com [74.125.224.71]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 696Ek6wf025452 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Tue, 6 Oct 2026 17:46:06 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 696Ek6wf025452 Received: by mail-yx1-f71.google.com with SMTP id 956f58d0204a3-67532014b2fso1033851d50.2 for ; Tue, 06 Oct 2026 07:46:06 -0700 (PDT) X-Forwarded-Encrypted: i=3; AKwUvBz51opW9TqpxQs1ZJjAgMP0syZ5NvA06XAXEgr1GkCf67uXlW+Avtjn/JM3zUBLxten9jmQeg==@openvz.org X-Gm-Message-State: AFq9FYLOgSKSdI40vKv/yDxieMtbt3lARgs7bgRDn4y/tjJG8nsjZnnN tJuFXEB39Y//iLHpmjbh3Q7a8+UVNB9dEa3h7GBtW2w7PMlU0isdhR6LAkklKaasHDwvlB0sxm7 HeJ5TkESgnmz8/KVFfCdNuyvJaYr2dNsvLExn0ZexrVpv1I1ykqcsvw== X-Gm-Gg: AYBFou0j0QOjj7aDT7uqNzgqjjSzGuahZexu9tQkr1/uWB2+u0/mNPR1fdOpdxHk0Ox IZCsH/nHLyVxKuI596PXryp7DJCiO1QQBo2/p6WmLbUO7KNDI3zFOWfWsBwVDvshsFgGqHCmi2R dgKSuPfR6HFrv8SJFyHW9mlgh9QfRj7+mFcZfLbPeqL+aVRBGKrXyNz9q9+HoHLZp05beloGfwZ lfDBwGiLzKnBQ2nA6q6E/hAkEsbpc8sLVUl/83lCwYyQtWIcMUepdwic0WQk5Rv7DKFIiaEl5mS zUPo73EM3m55QWb2uF8ZG/gy/OmGpsJA6I/HV1A25xvOCwCwQj2jvaEltmur8L40SmwF2KyDatz /X0PECidVqq8/SlsHd0+6wolnBHPsyXzBrc0X5h6xQADS3KUWnRjGozgCcDJjw3okZ0En74wjmh C2GoIPtrT/b6/iSIQ= X-Received: by 2002:a05:690e:80c:10b0:677:c18f:7257 with SMTP id 956f58d0204a3-678fce2574bmr669274d50.23.1791297965644; Tue, 06 Oct 2026 07:46:05 -0700 (PDT) X-Received: by 2002:a05:690e:80c:10b0:677:c18f:7257 with SMTP id 956f58d0204a3-678fce2574bmr669238d50.23.1791297964844; Tue, 06 Oct 2026 07:46:04 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1791297964; cv=pass; d=google.com; s=arc-20260327; b=HIhNYNGSFjHtO3VybI5X3EZ4v3Bqg6eFHnIAtnT8qKOfj4iQhEYk7k8kft3A+D/JhH JWr13Tcl718yTh8KigmW2J3skxKvuPhNNABpJxOG9JYBPaiHRuAtbxD7MQHcbwKLzi10 SYJKAGVrVOD+tBuhIRA3UBFO8Ke2L65gvakE5/PFXIxFUKEn6mqEQd+JLd1hVL8YKu6j vA5K1opke5DYTeeeni5a9xS9fjFNPggcemb0YN0hjyWi2r7tAIu4LQGGymgU84MyL2r/ YFVcEXiy+RbDlL/6fSvl928m+RkXyKnLIfiOBh6w1+2ysD6V1V+mKhix0ygYJHm58JsQ +5Ug== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:content-transfer-encoding:in-reply-to:from :content-language:references:cc:to:subject:user-agent:date :message-id:dkim-signature; bh=30DGx1H0VEQYu6nYvkwfh1bzWTdwH1kDRz6/zPuKmWY=; fh=heZ5AScr1cqGuLsG7xkizQNcbHES1KcFxjOiHFu44qg=; b=oQwJZjE8BTb9S/EVu5fYdlX1qgvJ/u7CObqEDzula1nlE1STx/IR6G6wZFjzoETGm/ qnIc3AiR8zxMg35X/yFIxwq9YoAG9AxnhGVLUjS7qzvsze+TlTac28Je0ayLJ87e9yJ+ IeQP9yIP0VtTR4j71ysStLKTpdaljDoHNI+KrMrbFTL99S/87VnLF49JTBtp+giCTkWi WklaaL854wkA8HSmD30HKhcR4e9lqqZw1qGewK55nnDviFR9po1Wz0SNwa/rK+z8Zzh7 3vu3FPSOHQKhBenHTE4dzdYqSy3H1Tv/iRyxnpGVxQ2qR7Zp9wkD/Jjjr0i+sCJ1Fh/l js6w==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=wIN6GAYr; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of den@virtuozzo.com designates 2a01:111:f403:c207::3 as permitted sender) smtp.mailfrom=den@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from MRWPR03CU001.outbound.protection.outlook.com (mail-francesouthazlp170110003.outbound.protection.outlook.com. [2a01:111:f403:c207::3]) by mx.google.com with ESMTPS id 956f58d0204a3-677ebb19509si1512732d50.20.2026.10.06.07.46.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Oct 2026 07:46:04 -0700 (PDT) Received-SPF: pass (google.com: domain of den@virtuozzo.com designates 2a01:111:f403:c207::3 as permitted sender) client-ip=2a01:111:f403:c207::3; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=wIN6GAYr; arc=pass (i=1 spf=pass spfdomain=virtuozzo.com dkim=pass dkdomain=virtuozzo.com dmarc=pass fromdomain=virtuozzo.com); spf=pass (google.com: domain of den@virtuozzo.com designates 2a01:111:f403:c207::3 as permitted sender) smtp.mailfrom=den@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ssj4IqYq6D60eJaJK17jimeNhn13/p5jdpgHy1KzojBsvhD6KFJARUm08wlpBslP0fLcPaez1acNAF5gp9ottzaSEVx9ENABAONe9T/O7Tviw0Mb567URtcdfZSsbCzCSz8vXly7iIVnSfGIKMGu4EBVkHQq71sysn+jKvxGeU115wmQC/0QhC91bF0fRojfaQPGMcdwCXuYBrh9m6jc1bYKIINJSUPD7gqWwwFhP8v31WXZd0sn5IQ9RjqskOyJTmr8VF5lVQQWuDjxXZWyejnQ402HFFZSvRWCMeOK0FOZzwk4SakAvKtTq3yq94nqad+23pqZWf2+uwiUuTTOUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=30DGx1H0VEQYu6nYvkwfh1bzWTdwH1kDRz6/zPuKmWY=; b=CWWLPa5qPJGJSvoNPSSwlMZQ+8UveNwy/NuDs1tmg2LGxumFqv958GJVJOBxIIVPVjfF+0lsU/VMX1ePj/nEt8m2XhFBBuS8DuPMyqwwofJkc4nmLiExN0C0etAbbml+IxsC+pcATIEOOa3RvJdRn4ACV9NWmBd2O26a8q5hoRXTtH8HSPWK6nh9ffPfC/dGHr4KxRa7HM9ZQuK6Lw4JF0qGRMiOopZpbCSCJhKexV6dSOsO9E10G3p+Fa2sbymqST9bNVrJi3yVCKDX53ss/Ojsf+POmJ98sIwWS1YMHmW3Oezy7ma3IZO190EwsNJvzD9wh8rkqZvfyOIkJDrrJA== 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=30DGx1H0VEQYu6nYvkwfh1bzWTdwH1kDRz6/zPuKmWY=; b=wIN6GAYrrgw5IvSjrgJxGt8iZZQO3GDOnj/PcqpBl2q7++bAuCpi5NkEVdrClse4O+pxfUj+vKRye+hNdLCSQFcLtM45dExns0nV6AJwqh70MH/0vaHsGDb9i4TMwnc0NMsDkE2LBdfHUvjW+7ALtKanOH4p8F/jR9OvZmQzE0zdCj20MUf/czemcL09xqB8Vqt6Qe+P4HIc5lUFbNBWCI7APiL9B9v8JVdO1u770UhcYZea97zatjR9VBSNx88wty2SnsCo8r+g0URnUYHQQe8gsCsDQyRz4ZKm5nnStZS4+w2acey2NkVscjgvx5z52M7qD+iQiv7MwD8lYOPOkw== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from AM9PR08MB5892.eurprd08.prod.outlook.com (2603:10a6:20b:2dd::16) by VI0PR08MB11064.eurprd08.prod.outlook.com (2603:10a6:800:252::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.496.14; Tue, 6 Oct 2026 14:45:58 +0000 Received: from AM9PR08MB5892.eurprd08.prod.outlook.com ([fe80::94bb:633f:1f55:4bbd]) by AM9PR08MB5892.eurprd08.prod.outlook.com ([fe80::94bb:633f:1f55:4bbd%6]) with mapi id 15.21.0472.016; Tue, 6 Oct 2026 14:45:58 +0000 Message-ID: Date: Tue, 6 Oct 2026 16:45:57 +0200 User-Agent: Mozilla Thunderbird To: Alexander Ivanov References: <20261006144428.341824-1-alexander.ivanov@virtuozzo.com> Content-Language: en-US From: "Denis V. Lunev" In-Reply-To: <20261006144428.341824-1-alexander.ivanov@virtuozzo.com> X-ClientProxiedBy: VI1PR0502CA0020.eurprd05.prod.outlook.com (2603:10a6:803:1::33) To AM9PR08MB5892.eurprd08.prod.outlook.com (2603:10a6:20b:2dd::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM9PR08MB5892:EE_|VI0PR08MB11064:EE_ X-MS-Office365-Filtering-Correlation-Id: 0bf7f7bb-5be8-4c1b-65c3-08df23b8889e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|376014|1800799024|10070799003|366016|22082099003|10067099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: cQv7k+xFMFzVaU1OAWAkGHw4zJBsvQdRN91IXw4baaFbgGGJyOta6BJGWZXLSHLlMdrUN6xXnOLOkjy55GOZ6dAcBphAoUdBNLYidWFLtnC3RLChCNepX8vmzkgkqDnwPTUE00CAM1EzL0RF/cSQHUb73CdtQTP/s3CnGLUGy7BlUfwk27xE9G019O+0YQPKQ+bCKUUgt+3g03E0M9IbTrfNwH56pi92VFitqNRW6/P7Dju8y+r/QxmWgYMF9x72sK9kFBeMEYnO2ivRZiICbz1xpDoeL/DfrW6g4MNNAYDMv8m2Uyfq9FRjgbO+M0Y05t/ZQyWnKKvRt0kOLXzmTPsPeIKWIeXgTkYxSqWqjYv5qPJwu3nKOedWxnXVjoddQOuyBRnIDoMdZUkx77XtnL1TYgDElH1NASFK0ZagDAEbiqiN0AyebhIiWKOG+CJ1AG0kAozWmRUf2uROgt0CgKfDe5TJeJp8JTPF1QiBXk7GuIXUT8zMOfJt4SsC97qTNyB5AdQU9r2XtC0jo7srU8nYTgEYIhYQYzfPZ1fsJ/RO7NTFZ8GvSGDHfp904sCfMv/iOcTAr4FjhUaYoWEsuYdc2Cn13SRgEfSYfoHdDKJWTMzFN76l7XtKJpWpOq4357IYMjEjuTJAuTF6ifSYK2M9OMvCNeUtKn89w3rMX8c= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR08MB5892.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(23010399003)(376014)(1800799024)(10070799003)(366016)(22082099003)(10067099003)(18002099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TXp5ckNiMGJjblIvS1ZiSlM2MTYyM1pLbURocFlrNy9jcXBCUXcyMUhRTy9o?= =?utf-8?B?TUVDcUt5VHVML0Vjd3dHTndtMjh5Z094RWgydDB4Z0Via2lsOUkvV2Fna0ZK?= =?utf-8?B?VXhjWFZLcmJuT0dNM2l2NWh4R2RIaVZ1TzJxNHZtdm4vM0VnL2pVM0h4WWd4?= =?utf-8?B?SnNpSm5od3ZkVFl5MUt1VVdxcG1qM092d2trVVN6NmR4cW9wUUM3bXlXUFVD?= =?utf-8?B?VFpubnp3b0NlVndFODNsYTBSeGJIc2FMQkE2cS82WmJEWURBRXp1RGdkSU9K?= =?utf-8?B?dUg5MHRyRDZkYUV5bmhJODNiZEk4aEV6cUxLZEp4Sjg1KysxOExZSng0YXp2?= =?utf-8?B?QWRTaitCYmZGNjNjTmhKdUhiUi9vKzBKZlhqV3VZUFc3NTNoM3pIcWlncGhj?= =?utf-8?B?eUhwczVkY1JxOXp4elRSdmJla21MNVNNR3pxUHlpRnkrdE9qaEhFRnZSbUtO?= =?utf-8?B?Zm1UU2NocGdLVG1rSzJjbzhKNGNCblkrOG1SOWpRVk5RM2Y1NW45USs1aW4w?= =?utf-8?B?TmJ3SUV1YmFOUHdaQnc5d1NWQ0R0K3FHNU1wemJHWmFrejB2L3BvaWpWdGxw?= =?utf-8?B?cTc4MCsxWlQ3R1NuNkl6NGhqbHk2WS9MUEpzUW40S2hpWE10SjFzNEZibW5r?= =?utf-8?B?TFh0RnN5S0pCY3AwSnEySDZQZDVPV3lKUnh0UWZuZ0lKOXE4dlBTdTVVZEcv?= =?utf-8?B?MmltRDI0N09selZHQi9uL3RlU291RFFDQ2lLRjA1ZmRmUHV2ajlVZlpHdUZJ?= =?utf-8?B?WGVCTFE1UmVhNVRoYVNEWTlVVkNSK1RxYjlOOXl3QjI0d1JOWmpOVENlRlkw?= =?utf-8?B?VStiTjhOZ2NTOWJqZFc3UlRiZnV5Ym1Pc1NZZnBFSUYwaDNYZ3RsV3pPUFJx?= =?utf-8?B?czd2ZU4wOGJqMXpQSVA3dXdlYUxncndqalRpbTNLajdkUVQ2bEJ6Ky9RNXBL?= =?utf-8?B?UkJSTmZlL1FCeTg3RnFKbit2aFZVZGpuOFdNVFJQQXZxTHZGQ0h4SHVQaThC?= =?utf-8?B?eHg2TGovMlJQSXdqVTFXbW5pSTNFS0pVTGc5K0o0SXE4UUtKSjljUDI2d0Rs?= =?utf-8?B?MlN4MXpKYmkrSmtGOWt1R1BSRnpQam9ubDNlU1RrUk1tTlN1S0J1dDBqcUFJ?= =?utf-8?B?Q0hPckV4MXplT1F1ZFBSb2NGdlBFaVVJWUk0RFBpWG9Xdyt0VTBBa2xpY04r?= =?utf-8?B?WmU3VTZRdlBaMlhKREhndEFsR3RjeElNb2hiZzFoUWV5bmJoY2NFOEVpVnFV?= =?utf-8?B?TjZVQklxUllRTWxsUWpCWGxiTFFhQ3czSlZLUnBqbVRlYk9pY2cwWVg0TkR4?= =?utf-8?B?aTZ2VUtCMUkxcFg0Y1FCaFc2cHNlbDJTV0ZZeDRlWDhtRnRCai9CR05YcHZx?= =?utf-8?B?ZG9UOUZjdnpyK1NXd1UwRWYwV2pBSDRZV2dMQW50ZjE0VlBQR0hQS3JMUity?= =?utf-8?B?UXcxYUg3NEMrd25FRUZBN1pKMHFlVk5YenppYUYxUnFISjN1ajV2dld4YmY3?= =?utf-8?B?VlNBZmtCY2pyWEo1MXNtV0N2N1JlRkNlRUJGa1Rzb21KMENKOTRuS2g3c3RS?= =?utf-8?B?WXRhb2dGS0VEZ1l1UzNpL0JvZGlFTG0zc3lObDJMTHZKVGhEOTdQbkpkTFZS?= =?utf-8?B?MlFmVUN5SXVDNHlXV2xPeGprbE5BallKVWpGRjY2dTRwSHBySVJhS3lVWDlN?= =?utf-8?B?dTVCQ1dDOXhhRVQ4d1BKamtsR3JmZDFWRlpmRDdiWkU1bCs5dzZ4VjYvZUM1?= =?utf-8?B?UmIxbHE3VDlSZEFicVhKdVlVdEhYSmxqc1d6ZDJpWEtyTlM1bXZRRnVuVjhJ?= =?utf-8?B?SVVNZ1RjT3ZZTFZQaVVwMXRLcCtLK1BBWXdiWG5kdHdhcFdNNU5oUUVVOHBy?= =?utf-8?B?UTN3bTR3Z3ZtZnp6VmVlU1A5L3FoaXA3czZIakpYSS9RQlYvRmpYdVByUS9R?= =?utf-8?B?VS9JczZjYkkvUlArWEI4TmIzSTVVdEdoUm41OHVaRjBucStJYndZanlTb05J?= =?utf-8?B?WEpoMkZPaEtFc3pINW9xM1Uxdk5mZktPMGU3VmJ2aGYwWVdsSnE0YVZibHNq?= =?utf-8?B?S0haUDI0d0F1MVFycVA2eEhybGVVbUhlbi9VOTNROHVVMWMwbFA4MHFLZTZV?= =?utf-8?B?Wm1Eei9OUVhkRlBFR3dKRlpWd085WnBZbW9tQTY1SnhWSnM4OEowTm9wUjhI?= =?utf-8?B?eVJlYk9MM2VQdHcxamdoR3FCaStUeTFsZ3VURXdkNUc0OXFwaHg5OHlYL3ds?= =?utf-8?B?N1hTMUg4R01qaHlFNTNGZ0wxb2NwandvbkFoeStZNUxmY0FDTlVqMHMrZnZP?= =?utf-8?B?Z3ROSkUvSGdIMHViZ2ZFVVBUK2J5WG5kaTgyRWtuVm5Ua2JZNk5TaWtIbXo0?= =?utf-8?Q?bovtuxr8jW8Luo6EhlCbkF9736alVH/v+T3dE0HG34uPR?= X-MS-Exchange-AntiSpam-MessageData-1: zAfAtGRA+L9i7w== X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0bf7f7bb-5be8-4c1b-65c3-08df23b8889e X-MS-Exchange-CrossTenant-AuthSource: AM9PR08MB5892.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2026 14:45:58.4561 (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: xy14BinN9GOSqHVcE5ui/oYPO1+zf425Yzyxd5LZDoJ6omMc6oLK+fwadGsjus349pxWgGHA2moVVBpnrNDwqw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI0PR08MB11064 X-OZ-Fwd: true Cc: devel@openvz.org Subject: Re: [Devel] [PATCH hci-8.1] drivers/md/dm-qcow2: truncate unused tail of image on suspend X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org On 10/6/26 16:44, Alexander Ivanov wrote: > On postsuspend we truncate the image file only down to > file_preallocated_area_start, i.e. we drop preallocations only. > Clusters at the end of the file freed by discard (refcount dropped > to zero) are never given back, so the file size never shrinks. > > Add qcow2_calc_used_end(), which scans refcount blocks backward from > the end of the file and returns the end of the last cluster with > non-zero refcount. Refcount ranges with no allocated refblock are > skipped at once. Metadata pages are taken from md cache or read > synchronously. This is called on suspended device after md > writeback, so R1 and R2 can't change under us. > > Truncate the file to min(file_preallocated_area_start, used end). > Skip the scan if md writeback failed, as refcounts on disk are stale > then, and fall back to the old behaviour on scan error. > > https://virtuozzo.atlassian.net/browse/VSTOR-148171 > Feature: dm-qcow2: block device over QCOW2 files driver > > Signed-off-by: Alexander Ivanov > --- > drivers/md/dm-qcow2-map.c | 77 ++++++++++++++++++++++++++++++++++++ > drivers/md/dm-qcow2-target.c | 12 +++++- > drivers/md/dm-qcow2.h | 1 + > 3 files changed, 89 insertions(+), 1 deletion(-) > > diff --git a/drivers/md/dm-qcow2-map.c b/drivers/md/dm-qcow2-map.c > index 78ee7cf5e881..39d465343d8b 100644 > --- a/drivers/md/dm-qcow2-map.c > +++ b/drivers/md/dm-qcow2-map.c > @@ -2208,6 +2208,83 @@ int qcow2_truncate_safe(struct file *file, loff_t new_len) > return do_ftruncate(file, new_len, 0); > } > > +static int get_md_page_sync(struct qcow2 *qcow2, u64 id, struct md_page **md) > +{ > + int ret; > + > + spin_lock_irq(&qcow2->md_pages_lock); > + *md = qcow2_md_page_find_or_postpone(qcow2, id, NULL); > + spin_unlock_irq(&qcow2->md_pages_lock); > + if (*md) > + return 0; > + > + ret = qcow2_alloc_and_insert_md_page(qcow2, id, md); > + if (ret) > + return ret; > + > + ret = qcow2_rw_page_sync(READ, qcow2, id, (*md)->page); > + spin_lock_irq(&qcow2->md_pages_lock); > + if (ret) > + qcow2_md_page_erase(qcow2, *md); > + else > + (*md)->status |= MD_UPTODATE; > + spin_unlock_irq(&qcow2->md_pages_lock); > + if (ret) > + qcow2_free_md_page(*md); > + return ret; > +} > + > +/* > + * Returns the end of the last cluster, which is used according > + * to refcount table. Clusters freed by discard may leave the tail > + * of file unused. This must be called on suspended device after > + * md writeback, so nobody changes R1 and R2. > + */ > +loff_t qcow2_calc_used_end(struct qcow2 *qcow2) > +{ > + u32 clu_size = qcow2->clu_size; > + struct qcow2_map_item r1, r2; > + struct md_page *r1_md = NULL; > + loff_t pos; > + s32 i; > + int ret; > + > + pos = round_down(qcow2->file_size - 1, clu_size); > + while (pos >= 0) { > + if (calc_refcounters_map(qcow2, pos, &r1, &r2) < 0) > + return -EIO; > + > + if (!r1_md || r1_md->id != r1.page_id) { > + ret = get_md_page_sync(qcow2, r1.page_id, &r1_md); > + if (ret) > + return ret; > + } > + r1.md = r1_md; > + > + ret = calc_r2_page_id(qcow2, &r1, &r2); > + if (ret == -ENOENT) { > + /* No R2 cluster, so all clusters it covers are unused */ > + pos = (loff_t)r1.index * qcow2->refblock_entries * clu_size; > + pos -= clu_size; > + continue; > + } > + > + if (ret < 0) > + return ret; > + > + ret = get_md_page_sync(qcow2, r2.page_id, &r2.md); > + if (ret) > + return ret; > + > + for (i = r2.index_in_page; i >= 0; i--, pos -= clu_size) { > + if (get_r2_entry(qcow2, r2.md, i)) > + return pos + clu_size; > + } > + } > + > + return -EIO; > +} > + > static int truncate_prealloc_safe(struct qcow2 *qcow2, loff_t len, const char *func) > { > loff_t prealloc_len, max_prealloc_len = qcow2->reftable_max_file_size; > diff --git a/drivers/md/dm-qcow2-target.c b/drivers/md/dm-qcow2-target.c > index be09615eb8e2..95c8b114d92f 100644 > --- a/drivers/md/dm-qcow2-target.c > +++ b/drivers/md/dm-qcow2-target.c > @@ -1016,11 +1016,21 @@ static void qcow2_truncate_preallocations(struct dm_target *ti) > { > struct qcow2_target *tgt = to_qcow2_target(ti); > struct qcow2 *qcow2 = top_qcow2_protected(ti); > - loff_t end = qcow2->file_preallocated_area_start; > + loff_t used_end, end = qcow2->file_preallocated_area_start; > int ret; > > if (!(dm_table_get_mode(ti->table) & FMODE_WRITE)) > return; > + > + /* Refcounts on disk are stale after failed md writeback */ > + if (!tgt->md_writeback_error) { > + used_end = qcow2_calc_used_end(qcow2); > + if (used_end < 0) > + QC_ERR(ti, "dm-qcow2: Can't find used end: %lld", used_end); > + else if (used_end < end) > + end = used_end; > + } > + > if (end == qcow2->file_size) > return; > > diff --git a/drivers/md/dm-qcow2.h b/drivers/md/dm-qcow2.h > index d9b8c38e093f..2c5eb7578316 100644 > --- a/drivers/md/dm-qcow2.h > +++ b/drivers/md/dm-qcow2.h > @@ -409,6 +409,7 @@ void qcow2_ref_dec(struct qcow2_target *tgt, u8 ref_index); > int qcow2_inflight_ref_switch(struct qcow2_target *tgt); > void qcow2_flush_deferred_activity(struct qcow2_target *tgt, struct qcow2 *qcow2); > int qcow2_truncate_safe(struct file *file, loff_t new_len); > +loff_t qcow2_calc_used_end(struct qcow2 *qcow2); > > void qcow2_merge_backward_work(struct work_struct *work); > void qcow2_merge_backward_cancel(struct qcow2_target *tgt); ploop? _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel