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 27364802A5 for ; Mon, 12 Oct 2026 09:37:27 +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 69C9a48I019741; Mon, 12 Oct 2026 12:36:05 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69C9a48I019741 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="rs6pySYn" Received: from mail-yx1-f69.google.com (mail-yx1-f69.google.com [74.125.224.69]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69C9a2H5019737 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Mon, 12 Oct 2026 12:36:02 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69C9a2H5019737 Received: by mail-yx1-f69.google.com with SMTP id 956f58d0204a3-677ada64e84so1478787d50.1 for ; Mon, 12 Oct 2026 02:36:02 -0700 (PDT) X-Forwarded-Encrypted: i=3; AKwUvBzEOsXKFR8JIwcFUljjl+LWKIAfvtmCghWVm8y/w+yC/pOrCwtmXAQHUKMScfHDStITAC7jOw==@openvz.org X-Gm-Message-State: AFq9FYLrwYJj6VwoxLGw/649xFGpc0+MYfZ9rnFyQ0ZOnypbOSIrFKEX EgNc8Z58G5D+aYHgxdhN5goTPTKT43mF2D6YCqu0Rx4clgbK1n/Qp/r8xoCrO8youEqRB60CYMY n2JgxhuUtb+AKOoZbpSwVAlRWaqLrndoExEvt/Z+6s18Vi4rxuC9xXA== X-Gm-Gg: AYBFou2qaL2uogC4De8dMJOGp16dWIgT+XaiBT7khCmBjOE6inijYLRjNDUS/Y/JV9Z ZlGCsNCC1ybeOlNJlpO1nFI8+eob/SiFzYqyyaAKbZRP/6e4x34ndL2MT2K2Mp2JKT4ZRszwBub V2FbE5+twfEzfA6jls1PZpDUfp3xbNXwTK1oPwWf4MtcMXCeygfHpi/qhmxu0lSBrTGtz+c4+G7 tsaGeeBmmCLJ1vZ1p0UDKI9jmAxa/q6o8Qghqum8hUayRItvTFoyAmzTqrMcGSpXSO65QVnc9BP 1+3hXVaA8aPMK29N41sFZ2w50Ei15lBUvPn847SxVL3+SYkL/IBEm4gFRxvHSN9Coi2wFS43IKh sVUXwR2B3YYOG4oILpmkDdh0WFiD88rfFUczFJ53Rs+ROBAtoubKrVASwoumh1wBQdowyhJ7SJZ HTzQ4ZNOmEFgLEdkeo9tj3NKA7JqqP6HFIJg== X-Received: by 2002:a05:690e:169a:b0:677:cb97:cb2f with SMTP id 956f58d0204a3-6793603508bmr3912169d50.45.1791797761611; Mon, 12 Oct 2026 02:36:01 -0700 (PDT) X-Received: by 2002:a05:690e:169a:b0:677:cb97:cb2f with SMTP id 956f58d0204a3-6793603508bmr3912155d50.45.1791797761056; Mon, 12 Oct 2026 02:36:01 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1791797761; cv=pass; d=google.com; s=arc-20260327; b=e+HTtXBuwhIK5SnCz6eBkx/0ijT8J0BlukcLI6j2NlijwpqWr/Kefj9gbKhP2n98P4 uB5CeRkuanBcgLyOMJDsk1+Jqt+XSdQIH11pUQLDOxsc2orb4H2Dp3xvSxPx16wI8uJN AJiZ3pAegmRkZoyKQqyXQKGh2WfdSGIlhvu8fC1Aqu0VSFPlyL22n3ZNnCdSnaQHVgc3 +86srEa94tVMgcYNmCW/PEIk+cqRsAYwb6TcHg0ZdIfFejR+EEuvNB8J4146PLMiZ+ow Yu8R83E8juFycCib5q0ES4ysOrMCtogL8w9/ixR6E9AwV9tQ7bB3jwEANATzcyL0Wor4 wVdA== 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=1J6uTSnKaKyaZrK83Pl+/HkMs1c8SRQ/+8dG12Lrcvc=; fh=4uDeUn6QaP9HsnC5wnXFjPU9lMlz8i/hDRnuqoGFYVs=; b=N+sx8262jmqC4P0PFUTCTpp2CMJzWqSEab4zHjVas7kXexmuNtiJbcbz+4XpRMpvBk aKLOTi5B+PX/TtTQ+MuvURDMazlXsboHjiWBdG5CFGivIzo3ZDcTfHVaL2Pkbp9Y6OcT Iari9/wJFxlwbk03H/1BqBKS/xbBqiTyZjTNZ7Lwp27w4WY6f5FT0WUzY6/F7DV4M6TA 0Xkdgn3S/AJadWo6UMj3ceFgkga1VD/QzrIcGBfgIsjY3c9OtcBIi3CbtLlDeKUDPrwf /7MhJ8XqE/vh0aqHRZOFYK15y2tB6My9WV+TiE6QUkHMSqq5SH5ALfOkrg9aRwKX5Zi1 +Krg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=rs6pySYn; 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 andrey.zhadchenko@virtuozzo.com designates 2a01:111:f403:c207::3 as permitted sender) smtp.mailfrom=andrey.zhadchenko@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 00721157ae682-8b07f1efe00si28726407b3.64.2026.10.12.02.36.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 12 Oct 2026 02:36:00 -0700 (PDT) Received-SPF: pass (google.com: domain of andrey.zhadchenko@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=rs6pySYn; 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 andrey.zhadchenko@virtuozzo.com designates 2a01:111:f403:c207::3 as permitted sender) smtp.mailfrom=andrey.zhadchenko@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=ZeNzoL+BWxf2Jhdn6SJJ8OCA3WdH8VSU0L6T0iAMNaFbLLJ7zOfQJtuS6zJE3Gz49mEHX74H2OaqoZqegau7KYPkXaC2pfDyIHS4mwda03UxWjTUXTB6jLbZ4g1nzGojKcIUAaYX3CgXn46VoXCHSz0pHfWnWSZm+SslrEYp+gF3WC4dhJxTfpjsecEhVtKt88pH7efDQ8LFCxO+YLPLMNGXI2RtLtCdnPBk5o1mbbKyZ5DAJLGU2sphnElz6QeASPxiB88LsQrBiY2CjNRGhAr+3X2sAQ9CHyoTj2/IMH2qCubQ/77x1vF1qshgh7ZZkdb9Ua1k8++xLedG5Fhiww== 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=1J6uTSnKaKyaZrK83Pl+/HkMs1c8SRQ/+8dG12Lrcvc=; b=nwfRV2IwfqS7Cf6vTX/1lfXvJJjvRH6ZKYyJjpLp554Cx2y+MTy49d7+IoIUupA2KPOSys6wJUocFu9njIKfsAIdV0byid8EHKPBLEf72FD2EInITogXjPzGF0pXs9jbL7wje/AyuuAiXQBO5zpu6FA+h3TZAq/TQnVinu1LCOIaBPNdGTnM14idim14FZMB3eERayX5VmjdV1z9xoFdjHAg/prwxhaJ8y1ItMv9mSV/QtfyUMF73TgXUB3XXSzurXXBjzAMD7NDafIaXApvdktSeC1On3wGbG2EPF/0aBMq0fywwprbw5gTB3V2L4Lofu1keIkLbdG6fGc5Z4Sadw== 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=1J6uTSnKaKyaZrK83Pl+/HkMs1c8SRQ/+8dG12Lrcvc=; b=rs6pySYnw5uZuFqk8SSovEiiH57s5h5ztMLdYaAbi6S/wAJN7zzEWXpgj2QOOBYKhxCBvsXZSp5MCW3xrEYHsrgCxlrBuvIL9OnPI0UDLfJj2Jv5ZZIt93yH6LBpQTSbasYBMwCxrLmMKlIhr/OAPN7NzaUwrVaXNMrqmUbZe7tjmcUOgMRZkj8Vbh1azOoLOhxgc9x4bba/IIliQIyVh5h4ft4BSCML4Pih2i1FHzhlyoX7w8Dlx9rnWNwSrNj4oHJv1CYnAP3I5LRe7nYLqDeSovFyG9E7HfGLqauKQ6W5HuFXr2RfV3F1HvMPXXJIQUzLpnhvrmSIGtdYBB8T7A== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from PA4PR08MB6061.eurprd08.prod.outlook.com (2603:10a6:102:e9::13) by AM8PR08MB6609.eurprd08.prod.outlook.com (2603:10a6:20b:317::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Mon, 12 Oct 2026 09:35:57 +0000 Received: from PA4PR08MB6061.eurprd08.prod.outlook.com ([fe80::c3bf:e107:b1d2:6a00]) by PA4PR08MB6061.eurprd08.prod.outlook.com ([fe80::c3bf:e107:b1d2:6a00%3]) with mapi id 15.21.0522.009; Mon, 12 Oct 2026 09:35:57 +0000 Message-ID: <8d8a4d6c-28df-4532-aff9-b4e3868148cd@virtuozzo.com> Date: Mon, 12 Oct 2026 11:35:56 +0200 User-Agent: Mozilla Thunderbird To: Alexander Ivanov , den@openvz.org References: <20261010124642.927044-1-alexander.ivanov@virtuozzo.com> <20261010124642.927044-4-alexander.ivanov@virtuozzo.com> Content-Language: en-US From: Andrey Zhadchenko In-Reply-To: <20261010124642.927044-4-alexander.ivanov@virtuozzo.com> X-ClientProxiedBy: FR5P281CA0012.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:f2::9) To PA4PR08MB6061.eurprd08.prod.outlook.com (2603:10a6:102:e9::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PA4PR08MB6061:EE_|AM8PR08MB6609:EE_ X-MS-Office365-Filtering-Correlation-Id: 88540682-f0eb-40f9-4f7e-08df284437d4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|376014|1800799024|23010399003|56012099006|4143699003|261009221227099003|261009223027099003|10067099003|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: ewn3fZn+uMsDJygwcjdXtPTF8rYJUENeC3O/06EcMQDLAH58I0+LbrNjKM1HSedeJoGNRlLWny0caDo9VL929aaqkiQkgqC7IT5sUWKjh1PbZOw9q9CjhgXWj8k3gEMinvBT3Z7Jpwbns8cxmIQ38pl2Xnvyat3TkgLEOqTPI0UbqiGZTv8neXL2dzmUGUGd6mG3KiHD55HIQT9XmHg9sCe9IL5Hz+uEjt4TaJouMc6Wf1wWbOYWUjakl/RgJXS1iJSsiZwr1myer7rnxYXLjkAQAyB4RKRFAJ7phXJPkTNCnROuQc00h8yaOICKmNBvh5oR5McojiJzWN5VOgcBEC2Oc9+a1Bx3sH/KHxz14zsEuAP4rcBvDP4EXdzISEITahsQzkZheY3A3Bw4pljMvcj0UapI/fdqqjERaCIn8+1W7RXYgZLFhK6edS5I4Z1NLXW8835FyU00ch0jYpsm1htlfJvLucofItz2qj/UgMLswUpjQ1Wy8ztb9zK7orxCORkJYhWT3u3H6e+PfFVr4D9t5CyQUD9CdGHCdPsiklFErLuIUj4nCCXo9I7ebquDRchu8jRWlsB94k7GNcBFCVvax+dPTH6kDRZ8OL+Vf1bQFIhGBavthn8W/4BTXuOf3YJ90S9+8fRHpny1lkXnw1d/Cyiy0lM43xNKl9Pm+6Q= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PA4PR08MB6061.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(23010399003)(56012099006)(4143699003)(261009221227099003)(261009223027099003)(10067099003)(18002099003)(22082099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UmdxeXhsVXBNTXZ2cXkxbW9KRlF1alU3N0lhaStGS1ErVGRRei9lRUlzWEo5?= =?utf-8?B?SW4rTkZqdzNhSFNLL3NvZE1QSHYxT2I4bGkxYnUxTzJXbUpmQ0RJSXRFNGZa?= =?utf-8?B?WDNwWFM2U3EwdVV4dm5BT3JiNEVyWnlFMHd0TjBCSzBqZS9NM2FSZWYrdFpI?= =?utf-8?B?SmZjZjdYekorN3J4a1N3Y0owVjdCUlVHcExrbGQvNnNjNnUwS0lXK1o0T2kr?= =?utf-8?B?MUxKUnFYRWMrK3RXcFZLZFdVTElTUjA4RlFqSS8wWEc5a05LZGR6OFJjMCtJ?= =?utf-8?B?dmkxcnVNNmxMOVUzeUM3M3g5dDB0NEE5ckhmWUV4bFJjb0xldHV3WFNyd29j?= =?utf-8?B?ejQyWENqNlRKS29KQ2w2V3BsbExHdG44UVZ4a0cwd1A5ZFczWG41cHgzRk1Y?= =?utf-8?B?Nm80cE1qVm0xRkxJN01PeFdjNHQ0cUdEWGpHTDZod3ZKaURGSk9SSndXL2FU?= =?utf-8?B?Sk9aN216c0RPSm93YVlZWGJsTk4wdjhzWDFkWkQxVjhwbzJKemdhTm1wYUZq?= =?utf-8?B?cVJKVWFCRVp1U0pzSjFKb1kvN2dpMnVjcXNNTHJqOEhEanZ1MDZMVU1mR3l3?= =?utf-8?B?YWRYakQybW1MZGlsQmFBSDFKVU5ObFQ1dVNYVnlzYzRUQUVMZEswbFlrMXY5?= =?utf-8?B?VHEvNjNrWFVBMURBSGNXSHBYbVQxYXlEWWU5V2xsVVBLZDExQTBad0xqQ3JP?= =?utf-8?B?cUdlaEJ1VmZUSlVWRjQ5OW9SQ2svRndkR2VxZHE2Z3FRK0VIUmRmOTM1Nzlq?= =?utf-8?B?dGpsZUFYNEo3YllLRFFGWlo3VElyUVFZbkVVZzNsbElGUDRmT1lxbnlLZVhN?= =?utf-8?B?NVNPa0poWDFkekhJSmI4M1BMTjFXcXdyZnJ4TUczSU1BNXo3Q2t3UWlnbnkx?= =?utf-8?B?bG5ST1NYMENkYWpsdXdTbEpoQXNxVXVVeG9lWExqUmFTZUJPdWpxc1RuVnVm?= =?utf-8?B?Z2NpU0hscWJGWm1ObjNrT1dhcmRWMzZabG5hdEdma21MSlhEek8waU1qTGVs?= =?utf-8?B?cXgxMU1qL3RIZVZCTzlzc1JLcmhwT2IwclhUeTJTQTEveVZIRVByL21veTFY?= =?utf-8?B?VG9VU21zUVNJb0ZqUEJQTG1UM0hFTjlpckdZV2VkMUQxbnNkM2V5N0pnaFVz?= =?utf-8?B?UmJoeFlka1hKYTFUTGhNQjNneTlXUzBKcjV5ZkcwVVB4Nk9CWHhDWFZFbnVL?= =?utf-8?B?Zmp5Z05BTFFLN3pCMkFwejRuTkNiemhmVlNiSHlJU0FtRmFyL1JEaUNjTm83?= =?utf-8?B?aHVacmpWNEVyaVU4MzJod0prNWo1Z3FZSElJdDhJUkNhZEh0dkkyUExJZ1lo?= =?utf-8?B?OHpab0RyY3VQcVJMWmsvN3o0dnFQYy9CdjdVbzh5eXlXQld5dlFhVVk3eXBi?= =?utf-8?B?RWtoZFhVcUJYNkJKdldJdUZaL1RaQ2lBMHVub0RNNHpYajBITmNqZE5xV3Nm?= =?utf-8?B?bjJRclhqL3JqUWY2c2x3TllIWndmNXZxZUF2UWQ0VFhObjkwdWtrOFRqNDVR?= =?utf-8?B?QXpIdWFzV2VWejRDMktqb2lZVVZDRlZCeGxLRWVVTFY3cThoTE8wakdLa0FB?= =?utf-8?B?MWVvQURVbTlZOE55MXlqMVoyaCs0LzFLYUkyN1R5Qmd1UzBhS1oyZkErblMv?= =?utf-8?B?eG4vdnRUSXlnbUxxS1hadlBXcnRkblRrL0tSRC9ad25mZWEyM2twYUVXd3ht?= =?utf-8?B?WU1qbnAva29XN0FjR1hSVUU1c3dFSDNOSXJKRWVFdDFxaC9laTBESlo0bkI0?= =?utf-8?B?ZWlFTkdXZk40SEJ5dTBPK09tTkxRTFFoanYvRFRrWk1rNUUwY0lrZlFkSWpz?= =?utf-8?B?ZHdqQlhaRmRoM0FrVWJQYmt6Z04xNTFYR0w5dzQxYS9lRFBkTW9HemxZQmtF?= =?utf-8?B?NVlzTmN2bGcxMjNOY3d5RU1iT1dpU3FmQjN3QkVUakNFL1hyMW1oemQ0NjIz?= =?utf-8?B?eEJUekUwMTNzSy8vcVdHUXJyWXdmOEl3b2JhUFpuU2V3ZzZGQnpmaWhGT0hP?= =?utf-8?B?VFJIWGQwUjBlaUQ0Z0Y5eEpkK0JmSG9icmRTTmdqZVdKd3VLQzcwK0tyWDlp?= =?utf-8?B?dWtvM0xzbXV5dS8ycEE3TDRDNGg4L2h4NFBFVTh3a0hQbVVUb25pSVR0TEdJ?= =?utf-8?B?N0RFZ3k3bElyb0c5a1hFMmhZandwQmN4YWNQRjNIeFRJbnEwQ3hoRVIybThY?= =?utf-8?B?Ymw4NEJiNHJRcUpvR0NHOFgraHlJa1JncjhUOE5ka3ZMZGxZdlR3OS9sWmRa?= =?utf-8?B?dmFOaFArclYyRS9QSVk3ZXZrdHJhRmhneFRhSDNZeHhTRFd6TVFTTHNKTFlw?= =?utf-8?B?WDgyd2ZBTFRvZ1MrdXFFVUx3OXM3SlI3T0lxdVZzTGNMRnZYbldocDZES2Nw?= =?utf-8?Q?16gxq/+DYyQWqWU4=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 88540682-f0eb-40f9-4f7e-08df284437d4 X-MS-Exchange-CrossTenant-AuthSource: PA4PR08MB6061.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2026 09:35:57.0732 (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: uyItJvcCl7tdxuN6pU5YejSlNjZ2yzHaYFnJU8I/w3ukKpassIBHHWvlXNBBLcnDMStOO67caMch3Gpoq2Pp4MfmftBjj9Sfn235+ZMmwkc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM8PR08MB6609 X-OZ-Fwd: true Cc: devel@openvz.org Subject: Re: [Devel] [PATCH hci-8.1 v5 3/3] 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-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org On 10/10/26 14:46, 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. Maybe somehow reword this first paragraph to be more specific? From the first reading looks like discard doesn't work correctly because it 'never gives back clusters' - which is untrue, they are punched and do not hold any physical extents afterwards. What discard doesn't do is truncate the file end down to used offset which is another problem that this patch tries to solve. > > Add qcow2_calc_used_end(), which scans refcount blocks backward from > file_preallocated_area_start 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 the 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. > > Close and reload to RO go through postsuspend too: on remove, > __dm_destroy() suspends the live table if it isn't suspended yet, > and on table swap do_resume() suspends the old (RW) table before > dm_swap_table(). So the tail is given back in these cases as well. > > https://virtuozzo.atlassian.net/browse/VSTOR-148171 > Feature: dm-qcow2: block device over QCOW2 files driver Generally speaking I would prefer to avoid this code. Shrinking file end up to used data mostly looks good. The problem is image correctness: the cluster may be present in L2 pages but absent from refcount. After each umount we call qemu-img check anyway which properly fixes all this cases as it rebuilds refcount structure. And it also shrinks file end if it can. We can of course assume that every inserted image is good (e.g. we call qemu-img check beforehand) and we may never corrupt qcow2 image in dm-qcow2. Then we can 100% rely on refcounts. But I do not see the need to do it here if qemu-img will do that anyway and in safer manner. > > Signed-off-by: Alexander Ivanov > Reviewed-by: Denis V. Lunev > --- > drivers/md/dm-qcow2-map.c | 56 ++++++++++++++++++++++++++++++++++++ > drivers/md/dm-qcow2-target.c | 12 +++++++- > drivers/md/dm-qcow2.h | 1 + > 3 files changed, 68 insertions(+), 1 deletion(-) > > diff --git a/drivers/md/dm-qcow2-map.c b/drivers/md/dm-qcow2-map.c > index 78ee7cf5e881..65ee6ae144bf 100644 > --- a/drivers/md/dm-qcow2-map.c > +++ b/drivers/md/dm-qcow2-map.c > @@ -2208,6 +2208,62 @@ int qcow2_truncate_safe(struct file *file, loff_t new_len) > return do_ftruncate(file, new_len, 0); > } > > +/* > + * Returns the end of the last cluster, which is used according > + * to refcount table, clamped to file_preallocated_area_start since > + * the last cluster may be partial. Clusters freed by discard may > + * leave the tail of file unused. Everything at or above > + * file_preallocated_area_start is unused by construction, so the scan > + * starts below it. 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_preallocated_area_start - 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 = qcow2_md_page_read_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 = qcow2_md_page_read_sync(qcow2, r2.page_id, &r2.md); > + if (ret) > + return ret; > + > + for (i = r2.index_in_page; i >= 0; i--, pos -= clu_size) { > + /* Last cluster is partial if size isn't cluster-aligned */ > + if (get_r2_entry(qcow2, r2.md, i)) > + return min_t(loff_t, pos + clu_size, > + qcow2->file_preallocated_area_start); > + } > + } > + > + 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 bb11b8a74598..8555494a0c1c 100644 > --- a/drivers/md/dm-qcow2-target.c > +++ b/drivers/md/dm-qcow2-target.c > @@ -1047,11 +1047,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, "Can't find used end: %pe", ERR_PTR(used_end)); > + else > + end = used_end; > + } > + > if (end == qcow2->file_size) > return; > > diff --git a/drivers/md/dm-qcow2.h b/drivers/md/dm-qcow2.h > index 69d3ae6fca8a..73d3cf175bbf 100644 > --- a/drivers/md/dm-qcow2.h > +++ b/drivers/md/dm-qcow2.h > @@ -411,6 +411,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); _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel