From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (mail.openvz.org [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 10A1F8017D for ; Wed, 28 Oct 2026 14:02:43 +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 69SE1McN020526; Wed, 28 Oct 2026 17:01:23 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69SE1McN020526 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="SXDLM60t" Received: from mail-yw1-f200.google.com (mail-yw1-f200.google.com [209.85.128.200]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69SE1KAN020522 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Wed, 28 Oct 2026 17:01:21 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69SE1KAN020522 Received: by mail-yw1-f200.google.com with SMTP id 00721157ae682-8b155f4eb8eso15445547b3.1 for ; Wed, 28 Oct 2026 07:01:21 -0700 (PDT) X-Gm-Message-State: AFq9FYJ/sFZtR4a7Oy9C8OrADUxdwnU8vvBW+hqgSuHLZ2lc4I1yPFgV YZK3DM0yAklRLUbTG9WkIJ3vvXy9SJBQgZxYklhyx8ZCyVsp2LmWZjWlfX8PmT2H4BUxsyVZiKl g6oTIjb755lFBucmlDFeyAF3DwGfNoVDthXuFQC1V4uJeJk/3zB082g== X-Gm-Gg: AYBFou1XSkIwgXbCjWJoTdJJ+EDp95C8sil9SgDVUIusK8v9ws9qii9AhEWc1VvpKuG npxX3ZpuoO4gtn7IvwTpxu3bX8Rf8yjeMGnAbOjUXal4YFvYQJ5F6XdRHcN+Btc8LDj6pvkcQ/L DZHFEk1DjJ/JzL1SHkhQN9qQpZCODxx84Asyp+9jIFahw20rjC3n0kwGmsdQbEV+tirIMG9FE1A HbEE8mcQm17LGszFZUFO/A1KBBUGmyKv3KOQ7sVf4r020HNPPexGLSFQ4j64wg4VSoChta5lKAn 0Anq233GWWoRsO2Zzgx/McWhvEpxosck19/Y6hzYe2KtLahioYdMkibQNjBWn1Le/DFlu4v4Qr7 AOT9jdraeGoJweE8sFqfhgGDGURKmsjXIMDU6zPDZNn1QGKOiIvnHF/UF9nJXg9+EFWfoTfFJ+r P27tZInD+vrF9sAZ65mRurrXrp0lRJB9m30HGV X-Received: by 2002:a05:690c:e650:20b0:8b0:5847:8829 with SMTP id 00721157ae682-8b1b5c7ff8bmr10305977b3.56.1793196079027; Wed, 28 Oct 2026 07:01:19 -0700 (PDT) X-Received: by 2002:a05:690c:e650:20b0:8b0:5847:8829 with SMTP id 00721157ae682-8b1b5c7ff8bmr10304707b3.56.1793196077323; Wed, 28 Oct 2026 07:01:17 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1793196077; cv=pass; d=google.com; s=arc-20260327; b=prs2D5hqbYKZp86u2mManzcu+WjMLQCSGb/ClUiSmH8ra1EZWc2Conm3UU6MhEYAN3 jbFNxSEfCQyM8SO8Nx6VFG3vOyMC4E5h+UxHLVBOW/2LhnwsdUkgXuOUOEsKVpAJmYWD QogVrm1LOE6zW9LV2icddIKubXhs8EcLXP7cnGVgwy0s4EB80xr8QMEzKu8kza/tkSKe cLbaBS0AQyeeYugNzpjK4nSwOHuHhjVmHtL5Ewfg49Pk++JcvQTHkTqh8rmxi+FoFDG4 cEYXfNRC91fQ82flkhK+JoRKUSH6aV+/792dbQ1pZf68b5WxfWDPR6uCcIY80OykPKLC NezQ== 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=haXBsn2+zI/f6xzL+adGbHSyvQEDLKqY+49fOJSZVTo=; fh=cZ72tgMlH9Mo/yU1ydTnVX7gSx4khQcwDMluwhixV90=; b=Bp+1cM9fH3qzZzMpNa5J0IJxC1A7ulsY6L7bcXn6c7PGeV++pgxrjSB6rxAUZZpcir 7i/Jp4B8A3wt2LSvcqH40mZcKl8UQNhuFkmpBOqFbanHl5nsGgQxsCeznM2Na2fxLqyK zyfi2eLM2POhqiVZytf7dMC5mrkiBa9/SZEU1TB1mSCiWShVwr5CfzbQzGnX4Feeu+ME Rh0sITxZmH+gNAyLjjUahV/x1vW0DOWXpIIlFlPxa6cs4ZpqgZOtcQl5MA7ftMRtgVnD hz2UQPjDRbsJevl2na3sgVJvO5zRs/haFJ0WwIxib2XOfzhO5iOurADhtbx5j4TTwFou nXyA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=SXDLM60t; 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:c200::1 as permitted sender) smtp.mailfrom=andrey.zhadchenko@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from DB3PR0202CU003.outbound.protection.outlook.com (mail-northeuropeazlp170100001.outbound.protection.outlook.com. [2a01:111:f403:c200::1]) by mx.google.com with ESMTPS id 00721157ae682-8b19e43848fsi37372837b3.5.2026.10.28.07.01.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Oct 2026 07:01:16 -0700 (PDT) Received-SPF: pass (google.com: domain of andrey.zhadchenko@virtuozzo.com designates 2a01:111:f403:c200::1 as permitted sender) client-ip=2a01:111:f403:c200::1; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=SXDLM60t; 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:c200::1 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=t+T3WMvQpgDXTfIu/tkxNqhIunC+8WokIuGvnNwhnszPBcfIecKOnEzhwfgSimVxutuZ3LvJHVh0nFwP8dtWdPpfFHMOSuaQ7lPzr4E82oAL5cZ2t4hltgCffaauzEc2C8l5kmTxvANXgBuvI9lJ4rjC15NIQDMLxLFFB8I44LsAip671FDaNBDUSifN2xNlvGxEwnj6whI170DO8JxlQ+uRZ6UDXNZjovmY/vhEF/eobefS24Mz1Hly9n5ThWXkJ1M7x68hfXYY/nAnr2QCUA2nZ5cTQAMTICRqjvwU+ZuCua/pvB0an6tmkiviSwuFTFHrWShLkNbJJC+9hUN0wg== 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=haXBsn2+zI/f6xzL+adGbHSyvQEDLKqY+49fOJSZVTo=; b=RqbSTnkwGlQLOs71cxYVNp7KVw0A0p0AxKzcyXpvatkzY30xlg31kYhIJMFiVfh5HFng0ot0f0PO4Ooa3d8rBuMAdr7/dMSuzAPJ219tJxXi693Ej70D5V9KTZbFagVZnm7Bd7rxcLDB5Yvna2a7R+MoXs4isAFcpkKHLkiQChKzdx/ppa7pQMtVTVb1aws+HgDEODt1UbH+fg4YNTNHVaXEeBHv9Zw786Low7MY4/iYOyUVUKmVRYqH0DbsR2edqLNws0q1S4dzxb8vW8HbD31wflxnReU3hFjevtskj8QZ5JClamu2Qh9qa9Jfx+FVVDBLZF5Txk2n8N5HQ8GAZQ== 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=haXBsn2+zI/f6xzL+adGbHSyvQEDLKqY+49fOJSZVTo=; b=SXDLM60t7WivoBqvp0BQbj69/AN583D3Eg/gAUs6hzLT0/JYxhgx75ycEhhetqKepXQJtoiefBjA3PS/n4sck8YH4qNJiE7TYGVZyaeaps8EW8Z/Gqxk+YF6F9uYqD8Y93bG8YAkZJdoYOWrEVbrHgr2xAnNiMsVks8ezc7/L29AWvnB3X1XlcVyc3G8IdMamJJ6NYWkKKC/1R2eHcoPdJJ8WS8LVI7E0Q16fyx1zuw7viZS3P800PBrdsonNxU3cK82qBumghiDgVRA44+oRBk2fDuaVrjw6Vf9jNl8eEowPBGAu30kwui2+cn0mVbfdoZM7flug+KFGtW3Da8K7Q== 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 AS4PR08MB7687.eurprd08.prod.outlook.com (2603:10a6:20b:506::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.546.21; Wed, 28 Oct 2026 14:01:13 +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.0569.007; Wed, 28 Oct 2026 14:01:13 +0000 Message-ID: <027fb420-d602-43c0-b7e7-d820a7f79cbb@virtuozzo.com> Date: Wed, 28 Oct 2026 15:01:11 +0100 User-Agent: Mozilla Thunderbird To: "Denis V. Lunev" References: <20261027163300.2166639-1-den@openvz.org> <20261027163300.2166639-4-den@openvz.org> Content-Language: en-US From: Andrey Zhadchenko In-Reply-To: <20261027163300.2166639-4-den@openvz.org> X-ClientProxiedBy: GV0P278CA0073.CHEP278.PROD.OUTLOOK.COM (2603:10a6:710:2b::6) To PA4PR08MB6061.eurprd08.prod.outlook.com (2603:10a6:102:e9::13) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PA4PR08MB6061:EE_|AS4PR08MB7687:EE_ X-MS-Office365-Filtering-Correlation-Id: eb8e425a-21f8-4461-4727-08df34fbed2b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|366016|376014|1800799024|261021123027099003|261022105027099003|261021121427099003|10067099003|56012099006|261009223027099003|6133799003|18002099003|22082099003|261026121527099003|261026140227099003|5023799004|4143699003; X-Microsoft-Antispam-Message-Info: P4izCazJW1uIq6qPgbMt4NS3F8fykRHiNaQX5EqwI++TZAeDJ4Lf+CVOEWeb8SEPwQEyvpXiR5bbvflpPOHyYIj1Sobg7Ye9FaQxQkInt8i/EQs/0Yyd7eC22xYqmP3Oiv/STMfeC6ELt4avm5xzb5pLKSJg72tP9T0GfzUL3ySGEW2es417dr4DRnZu9a6m4xw/VWGUUJ7mc2mcq5/YOAMoaOnJ2Nd29hHfR3PEn5KnVs/sAy5NJsSHzvYtRa1WUIP1Ywg4tUPHq0twf9wvJrSPQvv12Zdt7YdrAmS6ZX+VozBVUOgR/lA/f/YTcsnvgFgEf0mWUZjGnMXZ2lw+xwpWZLmR0VIjQo3sQNUcykFCpnQrOFfzNeFUwPreOf6U8Qma5Eez/RHyAi2KGxn25PNtUvKZM4Dt7q0o08FMEUEwN/EGfGTCsYPBjwIWiqcb0QBYxaAA5WwKFgEJEu+47yeJZdxcTl3hID4IpVBtxiw9Puf9IDxwA86zGzxlCPyDJQCTUmWiQA3URCGseT8cc1kiYIAGhC1ZoOBqbVhvsKwJVHGL0852rIaEZpCeBdL3rO+OXR42Z4EOctfpdJy1GG3n5dm7SSjO20H7z37rGsJ2OwIj9yZIQ65da9umZwvN 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)(23010399003)(366016)(376014)(1800799024)(261021123027099003)(261022105027099003)(261021121427099003)(10067099003)(56012099006)(261009223027099003)(6133799003)(18002099003)(22082099003)(261026121527099003)(261026140227099003)(5023799004)(4143699003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YjhaaHFnNDE3ckkzUUJ5R3dEKzBzQm5HNDBNTVc5K3dGMDFOa0c0VkRDZzVC?= =?utf-8?B?VHpuYjdxN1UyNTVMV1E4bGhMdW1LNEluNzRWdWFVdDFUVkR0d1V1bjhoeGFi?= =?utf-8?B?VmkrNE93MlRZZmZXM2FGODV2Q05iNlcrSTNuK0FtakozSDRQcWx6V2pUdDU0?= =?utf-8?B?SFJUbjk0L1BFbklpNStIOHhweGYzeDdBNGxkb1ZweDJwUVJZVHU4a1ZBR0xC?= =?utf-8?B?TkY3Y1lzRnFiSG5DdFpKWHlTbmgzQ2ZTcy83a3BtUFlVNVQzR2RNUTFmcXQ5?= =?utf-8?B?b296RDhoaC8zeVZuNWRmQWQrNXRpaXFDV0h1UUViQlRZdmV6QnZBaHFpMDhx?= =?utf-8?B?VlM5RmZNemNtOUhxQm1HdW9jMTk5R0Noc1l0NUFPK3JEdnlsSnQ1ZmRmcmJO?= =?utf-8?B?MmRFY0JXRXpQQXFSZ3JPaWMwNWpLRjI4U2QyVDE0eTgyNk1jZVIzV1JndDZP?= =?utf-8?B?bXk5MkNjajRNamw3Q2RlenQ0V295RVhxdUZkVFF0NzRHWUNjc09DODNwNG1I?= =?utf-8?B?d2xBdnBkaGZ3YlhvbzhoeitKbEJoZU5xc1NJa2JDWGpYK29QTnBVcTFpZW5o?= =?utf-8?B?RE5VaGJwSTMyUWw1eFFxaEY1Q0dFRTJya1dHUHB0eEN3NWxBeFRSYVF6YllZ?= =?utf-8?B?WmVzZ1A2ZC9wOTdVbWI5Z0pzdDJTR0c0YTFXdmE4d1ZNMFR4NE5ETFBxYW5w?= =?utf-8?B?Zk05NlU3WE1NNlQxOGZaajQrak5QeS9iWjJ6TWp2R0Z1KzFaZnl0cDRzTTJl?= =?utf-8?B?UFdleUVHSWVpYjh6UzBvejQ4YSsrUkVkMFY3czNKUllFU2ZPTjVtZEU4M0Qv?= =?utf-8?B?R0F6cE12YjRRM0hpNVE3RzlNdGxrcU9xTGZpWXlPeXBCeEM3QThMeWNJaWgw?= =?utf-8?B?a3lIbmQxK1dsVUZUUlg5cDBQNmxhMVNVSVdMMkxOQlBuOEkrcU02OU1hdDc2?= =?utf-8?B?dURFWlhWV2hvSG1rdWxhL0RVZ0FrYldkOU5wWkNtK1pYQXhDaXhLVUZxaUVp?= =?utf-8?B?SGlsczE2VUJBZVhpdmtMM3MzcjRVY2wxQnhSbU9UYzlBTlZvOFJUSC8zYWlo?= =?utf-8?B?eEl5QWxHemRFWmxwZmlNSGREN0JLTXVTdXpINE4rVGJRQ1preXQ1SUN2dEYw?= =?utf-8?B?dEJmZHNwVHFNOFVtWlpVRWFnVlkwVFlPUVhWSnREb1lzajV6eG1hakJTMXhp?= =?utf-8?B?Y09TRnhFZE9jVnRzZy9jMG9KTk1jL2dTNzFXclloelZKMCtOZDZGS09hTVhH?= =?utf-8?B?UFNoM2M0bWY1MG1XeDZUNUwzb2d3OFRjeVROV2NwdG5NM2Z1OVY4N2tFM0Vk?= =?utf-8?B?K3BkMUZNTlNLWjJ3Y3hBdWZoTm4xS0FjVEhxU0Npa2dLL1FYbk5JbVVubUtP?= =?utf-8?B?czB0eGYzbUptZU1sMitVbWQrTHpMYmIra1Uxam5PTzhvVm1NSk52NWFrSWZs?= =?utf-8?B?UWswUUhHc25RNVR1R3JjUnZPd0dTTG0rVG9xS29ic3RCTGc0c3VFK1RhYlFL?= =?utf-8?B?dW5mQTluVU1VYUVvc1pXT3JVYUhCT2F5dFFzV3dyc3d6SUVCMy9laUxGZXpo?= =?utf-8?B?azloODV6RW9YZFgrU25lb3V3L1RMNnBYaVBaZENCcG03UE1GTmx2aXFnWm5p?= =?utf-8?B?YWY1Z1dJSXJLN01KaXVUTFVQOVhPNzM2dFBreE1TdCt0eW9Cd1dLK0d5Nldx?= =?utf-8?B?QWFpS3lJUlY4eSt4a3R5VngyQkMyR3pBeWRnRHQvZ3pUTEFwejRRc01pZGNR?= =?utf-8?B?di8yTjVWWGoxS05VVjRSR2lva1krYitXR3RxUlF0cUFaVlJEdUhzMStyT3Ny?= =?utf-8?B?akVsb3ByK0VNV1ptSisvWEJIcmd1enJyUjRvMmZyYXBvQlJPd25vWWlyc2M2?= =?utf-8?B?K1FCQW4yYllrY0RHVUVxZlZwT0tjcUM1aU90VE02bkRhaHF1ZHowSE9pbEFJ?= =?utf-8?B?cGU5enhTVElNb0psZjVLaWc3ZENsVW1yQmJuRTBvS1dHR2t4cVZScjZhOXN0?= =?utf-8?B?YkZVWkdxd05KTEZKL3JEYUpJSXp1ZU12azVGeDJXWVhpMGlpQXpwc3hRYmEy?= =?utf-8?B?bUNyNW4xVCtxdzdoRm96eW9raWN0czBoVVc4cDN5WVUzOWVMYk9SbG5tdDBF?= =?utf-8?B?ZEtsWEN5RHIwaFlJbFoxMG5RaTZsQnorQ0Ztb1R2S25EcEdJVHB1TFJNTGp5?= =?utf-8?B?VDBZYnV1UFNwejdERHZNZHFkeVIwcXhHUkEyRGRyZnM0V1lYYU5GTjg1NCtC?= =?utf-8?B?a1diTklrbGp1b2lRNENFb1czWkFKQWhXTVpZMkVYUGNGbnp0QWFHVmtLTmwz?= =?utf-8?B?WEs3aVVWYk5lSE1hR1BRTW8wYVMyY1hSQ3d1NXJaaEZyUkU0Z1BwQjg3a0J1?= =?utf-8?Q?YUkRzu8Rc6rt/YoI=3D?= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: eb8e425a-21f8-4461-4727-08df34fbed2b X-MS-Exchange-CrossTenant-AuthSource: PA4PR08MB6061.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2026 14:01:13.1380 (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: NNUJH/qMfBE2QmAuFGm4sGzEVyFhJcuW8Piyj9WhXaXGw/CL8oQe2Gsl81v07DeQMQUMZWpYUytLtdLIbOIDnpPso7PTw8yss34EIf1AlXc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS4PR08MB7687 X-OZ-Fwd: true Cc: devel@openvz.org Subject: Re: [Devel] [PATCH hci-8.1 3/3] dm-ploop: fix lost BAT updates when alloc and discard share a writeback 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/27/26 17:32, Denis V. Lunev wrote: > From: Denis V. Lunev > > Since "dm-ploop: fix and rework md updates" any update of a BAT page > joins the pending index writeback of that page, whatever type it was > prepared with. On completion ploop_advance_local_after_bat_wb() still > applied the written page by type: a DISCARD writeback copied back only > entries that became zero, an ALLOC one only non-zero entries. > > A first write to a cluster that joined a pending DISCARD writeback was > acknowledged with its new mapping on disk but not in the local BAT. It > read back as zeroes, the next write to the cluster allocated another > one, and the next writeback of the page stored that, leaking the > cluster with the acknowledged data. A discard that joined an ALLOC > writeback left the local BAT mapped while disk had zero, so data > written to that cluster afterwards was lost on the next open. > > Apply the changes of the pios attached to the writeback instead: the > allocating data pios and COW pios set their entries, the discard pios > clear theirs, other entries are left alone. The relocation on grow > changes an entry that no pio stands for, so its writeback records > that entry to be applied the same way. On failure the same rule as > before frees only what this writeback allocated: a data pio may find > its cluster already mapped by an earlier writeback. > > Entries nobody changed no longer get their level reset to the top > one; nothing needs that once the merge of the latest snapshot > renumbers the levels itself. The PLOOP_DELAYWB branch goes with the > old loop; nothing defines that macro. > > Fixes: ddf38fa44df4 ("dm-ploop: fix and rework md updates") > https://virtuozzo.atlassian.net/browse/VSTOR-151979 > > Signed-off-by: Denis V. Lunev > > Feature: dm-ploop: ploop target driver > --- > drivers/md/dm-ploop-map.c | 140 +++++++++++++++++++------------------- > drivers/md/dm-ploop.h | 1 + > 2 files changed, 71 insertions(+), 70 deletions(-) > > diff --git a/drivers/md/dm-ploop-map.c b/drivers/md/dm-ploop-map.c > index 34bf6487107f..a637df932495 100644 > --- a/drivers/md/dm-ploop-map.c > +++ b/drivers/md/dm-ploop-map.c > @@ -86,6 +86,7 @@ void ploop_index_wb_init(struct ploop_index_wb *piwb, struct ploop *ploop) > piwb->page_id = PAGE_NR_NONE; > piwb->type = PIWB_TYPE_ALLOC; > piwb->flush_pio = NULL; > + piwb->reloc_clu = BAT_ENTRY_NONE; > } > > void ploop_init_pio(struct ploop *ploop, unsigned int bi_op, struct pio *pio) > @@ -802,80 +803,85 @@ static void ploop_complete_cow(struct ploop_cow *cow, blk_status_t bi_status) > kmem_cache_free(cow_cache, cow); > } > > +static void ploop_advance_allocated(struct ploop *ploop, struct md_page *md, > + map_index_t *dst_clu, u32 clu, bool success) > +{ > + u32 i = ploop_bat_clu_idx_in_page(clu); > + u32 *bat_entries = md->kmpage; > + u32 new_clu = READ_ONCE(dst_clu[i]); > + > + if (WARN_ON_ONCE(!new_clu)) > + return; > + > + if (success) { > + WRITE_ONCE(bat_entries[i], new_clu); > + WRITE_ONCE(md->bat_levels[i], ploop_top_level(ploop)); > + } else if (new_clu != READ_ONCE(bat_entries[i]) || > + md->bat_levels[i] < ploop_top_level(ploop)) { > + ploop_hole_set_bit(new_clu, ploop); > + } > +} > + > +static void ploop_advance_discarded(struct ploop *ploop, struct md_page *md, > + map_index_t *dst_clu, u32 clu, bool success) > +{ > + u32 i = ploop_bat_clu_idx_in_page(clu); > + u32 *bat_entries = md->kmpage; > + u8 level = md->bat_levels[i]; > + u32 d_clu = READ_ONCE(bat_entries[i]); > + > + if (!success || dst_clu[i] || d_clu == BAT_ENTRY_NONE || > + level < ploop_top_level(ploop)) > + return; > + > + WARN_ON_ONCE(ploop->nr_deltas != 1); > + WRITE_ONCE(bat_entries[i], BAT_ENTRY_NONE); > + WRITE_ONCE(md->bat_levels[i], 0); > + ploop_hole_set_bit(d_clu, ploop); > +} > + > /* > - * Update local BAT copy with written indexes on success. > - * Mark allocate clusters as holes on failure. > + * Apply to the local BAT copy the changes made by the pios attached > + * to @piwb, whatever type @piwb was prepared with: allocations and > + * discards of one page may share a writeback. > * FIXME: a failure may mean some sectors are written, so > * we have to reread BAT page to check that. > */ > static void ploop_advance_local_after_bat_wb(struct ploop *ploop, > struct ploop_index_wb *piwb, > + struct llist_node *ll_ready_pios, > + struct llist_node *ll_cow_pios, > bool success) > { > struct md_page *md = piwb->md; > - u32 i, last, *bat_entries; > - map_index_t *dst_clu, off; > + map_index_t *dst_clu; > unsigned long flags; > LIST_HEAD(list); > struct llist_node *wait_llist_pending; > + struct ploop_cow *cow; > struct pio *pio; > struct llist_node *pos, *t; > BUG_ON(!md); > - bat_entries = md->kmpage; > - > - /* Absolute number of first index in page (negative for page#0) */ > - off = piwb->page_id * PAGE_SIZE / sizeof(map_index_t); > - off -= PLOOP_MAP_OFFSET; > > spin_lock_irqsave(&ploop->bat_lock, flags); > - /* Last and first index in copied page */ > - last = READ_ONCE(ploop->nr_bat_entries) - off; > - if (last > PAGE_SIZE / sizeof(map_index_t)) > - last = PAGE_SIZE / sizeof(map_index_t); > - i = 0; > - if (!piwb->page_id) > - i = PLOOP_MAP_OFFSET; > - > dst_clu = kmap_local_page(piwb->bat_page); > > /* holes bit map requires bat_lock */ > spin_lock(&md->md_lock); > -#ifdef PLOOP_DELAYWB > - if (piwb->type == PIWB_TYPE_ALLOC) > - goto skip_apply; > -#endif > - for (; i < last; i++) { > - if (piwb->type == PIWB_TYPE_DISCARD) { > - /* discard completed */ > - u8 level = md->bat_levels[i]; > - u32 d_clu = READ_ONCE(bat_entries[i]); > - > - if (success && !dst_clu[i] && > - (!(d_clu == BAT_ENTRY_NONE || > - level < ploop_top_level(ploop)))) { > - WARN_ON_ONCE(ploop->nr_deltas != 1); > - WRITE_ONCE(bat_entries[i], BAT_ENTRY_NONE); > - WRITE_ONCE(md->bat_levels[i], 0); > - ploop_hole_set_bit(d_clu, ploop); > - } > - > - continue; > - } > - > - if (!dst_clu[i]) > - continue; > - > - if (success) { > - WRITE_ONCE(bat_entries[i], READ_ONCE(dst_clu[i])); > - WRITE_ONCE(md->bat_levels[i], ploop_top_level(ploop)); > - } else if (dst_clu[i] != bat_entries[i] || > - md->bat_levels[i] < ploop_top_level(ploop)) { > - ploop_hole_set_bit(dst_clu[i], ploop); > - } > + llist_for_each(pos, ll_ready_pios) { > + pio = list_entry((struct list_head *)pos, typeof(*pio), list); > + if (pio->wants_discard_index_cleanup) > + ploop_advance_discarded(ploop, md, dst_clu, pio->clu, success); > + else if (pio->is_data_alloc) > + ploop_advance_allocated(ploop, md, dst_clu, pio->clu, success); > } > -#ifdef PLOOP_DELAYWB > -skip_apply: > -#endif Maybe even drop PLOOP_DELAYWB as a separate patch and in other places too? Looks like it is dead anyway. And this remove makes it even more inconsistent. > + llist_for_each(pos, ll_cow_pios) { > + pio = list_entry((struct list_head *)pos, typeof(*pio), list); > + cow = pio->endio_cb_data; > + ploop_advance_allocated(ploop, md, dst_clu, cow->cow_pio->clu, success); > + } > + if (piwb->reloc_clu != BAT_ENTRY_NONE) > + ploop_advance_allocated(ploop, md, dst_clu, piwb->reloc_clu, success); > > WARN_ON_ONCE(!test_bit(MD_WRITEBACK, &md->status)); > > @@ -948,24 +954,6 @@ static void ploop_bat_write_finish(struct pio *pio, void *piwb_ptr, > struct llist_node *ll_cow_pios; > struct llist_node *ll_ready_pios; > > - if (!bi_status) { > - /* > - * Success: now update local BAT copy. We could do this > - * from our delayed work, but we want to publish new > - * mapping in the fastest way. This must be done before > - * data bios completion, since right after we complete > - * a bio, subsequent read wants to see written data > - * (ploop_map() wants to see not zero bat_entries[.]). > - */ > - ploop_advance_local_after_bat_wb(ploop, piwb, true); > - } else { > - /* > - * Index wb failed. Mark clusters as unallocated again. > - * piwb->count is zero, so all data writers compeleted. > - */ > - ploop_advance_local_after_bat_wb(ploop, piwb, false); > - } > - > spin_lock_irqsave(&piwb->lock, flags); > ll_ready_pios = llist_del_all(&piwb->llready_data_pios); > if (bi_status) > @@ -973,6 +961,17 @@ static void ploop_bat_write_finish(struct pio *pio, void *piwb_ptr, > spin_unlock_irqrestore(&piwb->lock, flags); > ll_cow_pios = llist_reverse_order(llist_del_all(&piwb->cow_llist)); > > + /* > + * On success publish the new mapping before the data bios > + * complete, since right after we complete a bio, subsequent > + * read wants to see written data (ploop_map() wants to see > + * not zero bat_entries[.]). On failure mark the clusters > + * allocated for this writeback as holes again: piwb->count > + * is zero, so all data writers completed. > + */ > + ploop_advance_local_after_bat_wb(ploop, piwb, ll_ready_pios, > + ll_cow_pios, !bi_status); > + > /* > * End pending data bios. > */ > @@ -2737,6 +2736,7 @@ int ploop_prepare_reloc_index_wb(struct ploop *ploop, > err = ploop_alloc_cluster(ploop, piwb, clu, dst_clu, file); > if (err) > goto out_reset; > + piwb->reloc_clu = clu; > } > > *ret_md = md; > diff --git a/drivers/md/dm-ploop.h b/drivers/md/dm-ploop.h > index 23662943d56a..ce834df6df55 100644 > --- a/drivers/md/dm-ploop.h > +++ b/drivers/md/dm-ploop.h > @@ -108,6 +108,7 @@ struct ploop_index_wb { > blk_status_t bi_status; > u32 page_id; > struct bio_vec aux_bvec; > + c; > struct pio *flush_pio; > }; > _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel