From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from DUZPR83CU001.outbound.protection.outlook.com (mail-northeuropeazon11022072.outbound.protection.outlook.com [52.101.66.72]) by lore.virtuozzo.com (Postfix) with ESMTPS id 1A4E58045D for ; Tue, 27 Oct 2026 10:26:30 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ugHU1ZFgcnpiC8977GfdZmBEWW//mUD/H8z9q8p42vtemy1/M81f5wXX/7VOVLEy1ekNUkoEMhCPBVl+FTVaUk7Avcz3+jDHNW1Df8sOgQ2jT5UGR1fYm3NlGwM+GCwIWBPIuNqjwNkJuNQ8R+ycp43S3qvxQag/b37RSrkvD2oiyCE/khMLy9v4/v9Gs0DZxyOipM1u48X2+dydQKR4WPZpL6kHxXe4VpiG35ZGdwYvLYBbD9HaG6uYpsEkO14Y4A0IER8poppXq3GWHjIwdmNf1tdvNzbtIAS/EPweI98A1o9M+dVjTOWTBWtsSZSFp4e3/QPUbXYyeI2Rjd84MQ== 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=gQtmdlyVRrIlaafc/p2gAvOCtBxd/62opIOOQbQZWl8=; b=xsRIaOdaCat/tIJ3zAaG6mdr9jbe8QF30qFcVG3j9Mbm3x9vEmBatzXRQNZCKtw1rDaZSBOHRWCrJAzVwDaG8uMJKKwEn1rpvKomHWy21vV67dU+Zo++w9h9DgFxYtbdgPH15wBxV+m9VQGXHczGh5YVr09w1MRv5LfcsQAOKYJ041lGJyTWAG88r9BauvXEtobn4Uted6ClHLMzowyJ1MW2+mCGdhCNGk/O5yVyQOYXKrNpyavy/lEx8IOeaKci4tLzrd7K/R7eq1CQkkAgdZzaYzRHwlamGUtRsyoe09kT2CyTE00nwuthZYyN0hO73R+sAD0pNLWFVcbcDVY1fQ== 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=gQtmdlyVRrIlaafc/p2gAvOCtBxd/62opIOOQbQZWl8=; b=0SCpmWhBIrPIy2izd447a8+p95qB2DUGjY3PjhTGOMQ+5pcchw86hKzui5dvIcuQ0fQtMw6yLtT+P/uvnk70V+J6uaXyJyWndaZSBhr83c4jN5f3+QQKaVzFV1KUsfwTNukohxj71BPHPv2vcjnpj0N05UPUuxlTe/AI4hsWBLbN3+cMUc8xVdHsjpovQVjU852LvvyWH6wR1qKs/iAEP82yo0Sc0oFjUQ0awU/BH5+LrkjAltTFqiVKrnCao9oVdmGZgVGi/c498PvXaRNoLUew7Dhe2RFW5gEaOBXI4l9B16571QAD35WEdnpPLB4oCggOr5MmvJrVwIk/8gbMgA== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) by AS2PR08MB8693.eurprd08.prod.outlook.com (2603:10a6:20b:55c::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.22; Tue, 27 Oct 2026 10:26:27 +0000 Received: from VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8]) by VI0PR08MB10656.eurprd08.prod.outlook.com ([fe80::4e37:b189:ddcd:3dd8%7]) with mapi id 15.21.0546.021; Tue, 27 Oct 2026 10:26:27 +0000 From: Andrey Drobyshev To: svt-core@virtuozzo.com Cc: andrey.drobyshev@virtuozzo.com, den@openvz.org Subject: [PATCH hci-8.1 1/2] qcow2: fix snapshot data corruption with discard-no-unref=on #VSTOR-151885 Date: Tue, 27 Oct 2026 12:26:17 +0200 Message-ID: <20261027102618.798471-2-andrey.drobyshev@virtuozzo.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20261027102618.798471-1-andrey.drobyshev@virtuozzo.com> References: <20261027102618.798471-1-andrey.drobyshev@virtuozzo.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: VI1PR04CA0056.eurprd04.prod.outlook.com (2603:10a6:802:2::27) To VI0PR08MB10656.eurprd08.prod.outlook.com (2603:10a6:800:20a::12) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: VI0PR08MB10656:EE_|AS2PR08MB8693:EE_ X-MS-Office365-Filtering-Correlation-Id: f24e782e-9740-4cc0-5bb1-08df3414c22d X-LD-Processed: 0bc7f26d-0264-416e-a6fc-8352af79c58f,ExtAddr List-Id: svt-core@virtuozzo.com X-MS-Exchange-Transport-Rules-Loop: 1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|366016|1800799024|52116014|376014|18002099003|22082099003|5113699003|56012099006|5023799004|261021121427099003|10067099003|261021123027099003|261009223027099003|38350700014; X-Microsoft-Antispam-Message-Info: cbpS/djWQeKluMUc1qNU5jUbFe/Kn6B3xQn2EzfVsm9j5OsAGpBxvJ/AVb5Gb7E/DWG60mwwP6o06OnfKoeJoCDI4aCpslDr0oSv6SuyjlztlIUVQSFQAhZbiujjS9o7I0xRHcci95N0HJHbLycEeD8pktzIF3q7MhDiTwpgXto81O7Ln+Z6Ps+lgJEuvXumcw3qe8HsVOoGr/es9e/Q292PvRk9imAtgI7uCS50ce6uoFZLzWwj4xBEd+lbBz6BeUsIz123mqOG9fsWIAw2OB3Pnlrk8JzeSTTsgkDAvMQd12mVylNzUNBGCKxKhoIzwiBqNYXR7VbTgKCso6wMEYRehELqZUBqz9hGdDd6aiHDzJdK/WFSSBqFb24DhIXjVdtCtFmEkxsomDOazx9gQWDfFzfOXUwDC/1dcr0KXOFpCUHwsceCFwPfbZg46lrSW5aEvteVYn+m8T+/TxbmES/FZ4QOK3QNRpDYndx5UBNan3f0Odi1NKjYeR4EwqNb2PVHAZbDl702c/oz+7ayZeiufP0Q0fblJeFzRzNGnLPClGq5y9dyaM7Frv9xP/qyoLlYRr4/VT6NHCoEoKZRqlxZhhxctXBCCgisu0TQ0uDjCEYCeMZBWddnQTVQlNHdYaT7i0hTuGF/XG9rnMck2Frk8ZN1umFIJdhTgjjfkobKo/a+5RSq1Z9W2tIHtbBZQnJzV4cEz95Lk/E52YO3o9sNld68nU5aSzMChWIXBkM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI0PR08MB10656.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(366016)(1800799024)(52116014)(376014)(18002099003)(22082099003)(5113699003)(56012099006)(5023799004)(261021121427099003)(10067099003)(261021123027099003)(261009223027099003)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?vsquJ45VXyGNCHROg2tUBUVaZXd0gqNiQKq85k5ftne1n7D35F1RiuGBiAW8?= =?us-ascii?Q?7DAGV8WNmFBG/BagnYeXSrERKlDLZ0dW+Btu9RTvummS5HYwohU896RJmOD8?= =?us-ascii?Q?caWLSfvLTklHjDaN8ZoFVLUJ2ZYGmU/xoQwaB7hvuW6bTngODKBXsNR9hYVC?= =?us-ascii?Q?WhaD/krEVWW91QjF0GxND0JNddvNEfy016U+BUeF0Bwv9k6yrA/DotSN5xd9?= =?us-ascii?Q?FFLuIHWw4k1xaew3+xLQHofolPSl8LsdDUf6o+e+v4hAFoE3I/CEH/kaxf6d?= =?us-ascii?Q?eLGD8WAGf0aU90iTcn9oD3cg0PMxzvF5Q566NM9UBeamuvpCztoy0QLIe1ry?= =?us-ascii?Q?zu5Mi+ACQrRhbxIgL9EyinCnCdDFBM/nXw8lSCMMhjS6A4p1ozUafwxHkDKB?= =?us-ascii?Q?8IFwNGBsi8PgEfR9kzNPL20/9YsIS/WiA1YPstRUS0UKhXQQS55gvFPlYQua?= =?us-ascii?Q?EHGLcFJBrPSeuG7ASp+Lsef3DawPymvi7P9GEvz96boRI5NssuyZGz92LckF?= =?us-ascii?Q?jR3Q/853Z4xngiJQMguPEMGbV/h+fkVfSK0eX2wp8nA/vELEMyGOv8zknpoa?= =?us-ascii?Q?iD4upqjXuFdlmIfL6F801lDJ4s0hiW4RzHfL+Q2YzBqbJv1K0ZFQX6lLgIqM?= =?us-ascii?Q?1viKolEBATZC7wJKcEH3gNuyeEzy+vXG7/3zrDLfAFT+P58e/GBsAxGDcmM/?= =?us-ascii?Q?uVeLoSqqG0Z0IJLJVQLGjazkaHNpvY1LYeoUnj6cvwJCaO1X2Lver3l3tt2Q?= =?us-ascii?Q?lQyLhsUt/T5/LJIMSTJ/w71enDdiIJ+jm2JhXUE17gSe3I+ceqWQHRp0JVrX?= =?us-ascii?Q?Y0xJF6NFYSV45M9Yqf8gArVDv94DjSwJ4jRele2XoeXEg2+zsGONCFAsJhjh?= =?us-ascii?Q?WzwkmB/Gb2RHy+47qZ1tKRUjMHsEZiMNng30wFAPsaMj9XZTBaFUDmsh/DL6?= =?us-ascii?Q?GPp7fX8DYqfB59NdcgoubtTpdK6l22AOZhTcGCAXbaqjIYqFCIQYH/5ZMT7a?= =?us-ascii?Q?Qv+pKoqBUirUOlS1bRmLwz065VB/QuihDivHjkCwcoencYVVcEz8p2cXNZmA?= =?us-ascii?Q?nVFcGqDYQ8oqck4XKSs1P7uK6Chb7b64YhfcAu1SLtylswo9TPcOcpfO0Gfr?= =?us-ascii?Q?coCnHWUKy3OMZFSEy3yVqC0HFm6XCp88CrnQIFCYmJTebLD+jx65aflQPxlO?= =?us-ascii?Q?r2xVsil8MfahU5dTl69ur59+VtM4Kyf0D4KzloPCMYWOrfdXtpfdNpdlckrt?= =?us-ascii?Q?SgSZkr9UvQDnH4Ej927PmhVB5//9bvommr1NofnvoF/nf1yQ5lzNBeonWfZo?= =?us-ascii?Q?6d6PHlUdoMFUn5LxP1QH+vPZ62hIiorkDYX61n0cqzSM3ByAwDnL86YlS1Gq?= =?us-ascii?Q?WdPkh2NcIZ+VjkoDXhsi5w/JcxE5qutVtfUSoMVt3/zQ5JsrV+HJWKVQ0s34?= =?us-ascii?Q?759aib7aQ6iyWMqwFvcIJh53ea1MiyRcsfxphvGk8Gy5AZh3Qe0RJwJ41eD+?= =?us-ascii?Q?vEoWVpkf81fUe9vauCx3nvYG74yj17juUVv3daZWdZUl41OLmCcy38qR/mOS?= =?us-ascii?Q?4FY5lh6euznBA8enDwglTceRFuGy8mGrYedFqE1MWmsDB5Z3hLkre/LPG+qm?= =?us-ascii?Q?ln0zR1GyLB7kiTeZhnBixY/j3b3ZaJKvW/5sqY20eDvPUMDUrl5mA/D66MlP?= =?us-ascii?Q?jff+vwI8EOVCKBD9W0MmFRJohc7cEuJnWYqJxZoEu4adPlKBcR8dLnn9olRQ?= =?us-ascii?Q?EooWsHWnHoh7W0Hhcwv6RYEFN8qK/2I=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f24e782e-9740-4cc0-5bb1-08df3414c22d X-MS-Exchange-CrossTenant-AuthSource: VI0PR08MB10656.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2026 10:26:27.2589 (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: Ci8vilNwMXwOP9jBfBIoNksK1xhrCCSGM8jB9XbE0/aM61hfEp/f9DBhl2bEtIW7AbMgFbWfL5nghlFlkpUx/BCj/wZyr5ZHY4Tnbq/KJ5A= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB8693 Whenever option discard-no-unref=on is enabled, we bypass refcount machinery and unconditionally punch hole in the data on 'discard' and 'write -z -u' paths. However, when this same cluster is also referenced by an internal snapshot, such operations lead to problems. The active L2 table is copied before it is changed, so the snapshot metadata stays correct, but the host range under it is punched out and the snapshot reads zeroes there afterwards. qemu-img check finds nothing wrong. Fix this by guarding the 'keep_reference' flag by the presence of the QCOW_OFLAG_COPIED bit. I.e. only proceed with unconditional data punching if we own this cluster exclusively. Fixes: 42a2890a76f4 ("qcow2: add discard-no-unref option") Signed-off-by: Andrey Drobyshev --- block/qcow2-cluster.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index dfe728cd8a5..c3b11272afd 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -2076,6 +2076,7 @@ discard_in_l2_slice(BlockDriverState *bs, uint64_t offset, uint64_t nb_clusters, QCow2ClusterType cluster_type = qcow2_get_cluster_type(bs, old_l2_entry); bool keep_reference = (cluster_type != QCOW2_CLUSTER_COMPRESSED) && + (old_l2_entry & QCOW_OFLAG_COPIED) && !full_discard && (s->discard_no_unref && type == QCOW2_DISCARD_REQUEST); @@ -2312,8 +2313,9 @@ zero_in_l2_slice(BlockDriverState *bs, uint64_t offset, QCow2ClusterType type = qcow2_get_cluster_type(bs, old_l2_entry); bool unmap = (type == QCOW2_CLUSTER_COMPRESSED) || ((flags & BDRV_REQ_MAY_UNMAP) && qcow2_cluster_is_allocated(type)); - bool keep_reference = - (s->discard_no_unref && type != QCOW2_CLUSTER_COMPRESSED); + bool keep_reference = s->discard_no_unref && + type != QCOW2_CLUSTER_COMPRESSED && + (old_l2_entry & QCOW_OFLAG_COPIED); uint64_t new_l2_entry = unmap ? 0 : old_l2_entry; uint64_t new_l2_bitmap = old_l2_bitmap; -- 2.47.1