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 A11E8802A5 for ; Fri, 16 Oct 2026 14:36:32 +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 69GEYDQq017772; Fri, 16 Oct 2026 17:34:14 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69GEYDQq017772 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="TkZxhOLo" 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 69GEYBNT017768 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Fri, 16 Oct 2026 17:34:12 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69GEYBNT017768 Received: by mail-yw1-f200.google.com with SMTP id 00721157ae682-8b09ee23de2so42525757b3.0 for ; Fri, 16 Oct 2026 07:34:12 -0700 (PDT) X-Gm-Message-State: AFq9FYL0+hsbYXatBL5YxNHyBY/LI0DngmOwraKjdbwKzaZvD9dBNGeG LGE08igIv1gbjRqZWuZXaZMUfoFPUO44dq91KDYA/Ysy7Hh1+goo83UnIbNKQtLIAwbZnLuFc1J WLfA9xcs7dOkjawWS8unT7vZUcLuSUORjFmuH/czUULnQsdx/gxkNtw== X-Gm-Gg: AYBFou2ZiZchadzsS6zTQvZy6B5g65l72gsEc6aLq5lAYXKCpv9qlZQJesXOojAHaUZ F/x1NVzkht03P5ay8rRkUXpuDXmJDe9P2FstghcSTjN4SrcUbXbEGmIMZeHbopLUWrxzRLXtBtd WpSU+M8QTCgsyFDIrKGEAGgJzKVn9j5i042iQUqX/puEfavqwQzfw8W3ewfhCzYt0IJGApN/p6x ZNoR9l03g3DZPyAsDkS6lZl43bCKG21zT1xtfbFfbG9NPmv5atH85Ywci5RhWAyCoSbVZCuBhMS bRsm3iy/hYuh7hwG5O3pEqnVyJYYYtt5Qi+RMYmp5oajRFr2EM64HpoQ/OCm6zlfFeEmm0wo9aY jq3kWOsigLhhkOqacgPBW690ODNtfSelaKXw+BYQIum2EJoveXH+MDTVggoh3mZfjZsnDNpFt00 Nw+B448fPoyAynhhj2Pk3n+GZilMxW X-Received: by 2002:a05:690c:6611:b0:8b0:e385:ed99 with SMTP id 00721157ae682-8b0f21b015amr589287b3.30.1792161249793; Fri, 16 Oct 2026 07:34:09 -0700 (PDT) X-Received: by 2002:a05:690c:6611:b0:8b0:e385:ed99 with SMTP id 00721157ae682-8b0f21b015amr589207b3.30.1792161249233; Fri, 16 Oct 2026 07:34:09 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1792161249; cv=pass; d=google.com; s=arc-20260327; b=TBuUToQVehccxb5VxThGtOPZLi4xkHh6RsdmL79nX8QVE9gxFGZ7lhir7sJnlGeKA7 YQgfvGMUFUwOzoJmXdxl0g2/7FubJx/VkagvFZPNXagWAOljvAGOPiYSwlqQ/pgLMVvj 9S0B1pCOMNJqAORCF0xc304D8AgWMLi7M3bA9BclrB4JVSBHQzssIzbO6LdrLfvSboUw +BbaqYhQwxlcmxTCPuY1FxA2p8kbysFmuZZy5MqZfbrZInCfvqgBQt+xvi0XifG1sNN2 spaeiPGJevXbzxDhGhhtb5FslR2kn1rbJW5ZzUnvWYL2KJ4meon5f7tQNlRP+Vz9EeUu N8qA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:cc:to:message-id:content-transfer-encoding:subject :date:from:dkim-signature; bh=AVW0vy3zyu2TSqp2yWg1Igth65iWtMI/umyeNkqeFDQ=; fh=guGyMDsstaVXUfDORueFH431ffdO58eyFWHzu48HZ9A=; b=bgPpXlBqPoO3GaZJp7I1nIOjnXqTKl8QqWNKOIdhU9j/Z/MgNHTJzDSnuIo1mmFHnz n/tlf5+97yjPox8XwOm5J7JRE6djd4NedyHTA8hayF4sGk0WuMGNqUVZAT3/e49riSfT fSqN9UT/FOi+TMPQHza9SbyANLx7bWe9VpJuIw1vBqujos2tHlseDb5RHJJkjF+fDl3G Xc3mmsdMssPa2GWD/S6EqSkp38N1YSd7e/l/p27dWby7mcaOAovvVpcZ7Bokaquusbrs 4L5MlKyyUaoiTZCq93HNST/vjqpgDg2sCm90QTQ9SSiPRUd/XU7BrQMH/QNus0q5BkKc xJUQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=TkZxhOLo; 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 ptikhomirov@virtuozzo.com designates 2a01:111:f403:c200::1 as permitted sender) smtp.mailfrom=ptikhomirov@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-8b0e5c0c9d6si8311867b3.199.2026.10.16.07.34.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Oct 2026 07:34:09 -0700 (PDT) Received-SPF: pass (google.com: domain of ptikhomirov@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=TkZxhOLo; 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 ptikhomirov@virtuozzo.com designates 2a01:111:f403:c200::1 as permitted sender) smtp.mailfrom=ptikhomirov@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=YftfMbRPuU33l+xpF7YJCxOTh0/DeibY4R6DrEI9MTNaLzLLQApG0PUGZsBWjQEz1ac93BB6P40TRXKKyl6kf1g0vjO+nMSNlDje3NaV/NLC+z94CWtonLXKLU7taleng/La/u65/XR8Y04SSemUyxyqqo4CrHH3mldjzLfAFrHPtCZVnC/VJhzD8l2T2NBMsWl7o6EWyD/Hjr6rQav3/TZsbhLvYLlr2mYX9smpgLNRTO4D/JSzKYg2rttgf4zkBt8681LB8EtcdxfoGdXuWYlDVutzRfLOccbuzPm8a5tua6LWKRfX+AZmiNYPCY1O4JwZy6L0WxDutERqbFKCjw== 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=AVW0vy3zyu2TSqp2yWg1Igth65iWtMI/umyeNkqeFDQ=; b=i0RBz6bvoSl0JcxZdf+PaLDi+cD4fcqgIPMc+rsf1ZXOf4N3LiEfADGJfW6tuVwmzAXovVuq1AzI0I36TwpyzmWvg+JNGw29X5k8t3jqdSM+ujVIh2rU29OQdiVHp6thaVp5UhfFlv3Ag4gay4iEZCorc7x9kdDiWXvEG666tt3KBVYgTbg/Q4o3dFbb2jRvLDDSqwlRzzyb89WKBJ7qpvqOfXRRJSTNDdmEIm85iJxKz+UsS/kLLhcC7BFP4i0O2hoY1yfk53I/6P7Csyz3ZCCCHoUzxiA8+dHhJXpdWcsK43SR3KGRtFnR5dgNYJ6mykdibjgad6sQaBvWDorBqg== 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=AVW0vy3zyu2TSqp2yWg1Igth65iWtMI/umyeNkqeFDQ=; b=TkZxhOLovqQ44Rzqejr1BaKuyP+utlsFzZqrh+PEmwqvpdtTguAPtMCkUsKeiF7qbFJUKSQ2Wlue9lZBVEzJO0b2V/fOfaDft32rZmMK7arlJqMKC5wDyCb5+WBHG8JeneTabNqUGCObDzgIOCbQCPpwhA0IT/t41EO1vSLZR7YYYArFVU/lZWUxd1xTdtJplc6xpjhbbNQEhFT4JZbpZIN7o1x1l0uV21NfYTGws4TyuY2FyIJKfX13O+dSjjIidtAYTIqiDqtcy/imzayfRwAufIL/IYOWDCh0XS9w6r8qF+zEMjb1EpnVwsqPMHVkY3bvIVT3vJc56KU8Qg1leg== Authentication-Results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=virtuozzo.com; Received: from AM0PR08MB11804.eurprd08.prod.outlook.com (2603:10a6:20b:747::14) by PAVPR08MB9233.eurprd08.prod.outlook.com (2603:10a6:102:30a::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.11; Fri, 16 Oct 2026 14:34:05 +0000 Received: from AM0PR08MB11804.eurprd08.prod.outlook.com ([fe80::bf46:f137:f6d2:5b3a]) by AM0PR08MB11804.eurprd08.prod.outlook.com ([fe80::bf46:f137:f6d2:5b3a%7]) with mapi id 15.21.0546.006; Fri, 16 Oct 2026 14:34:04 +0000 From: Pavel Tikhomirov Date: Fri, 16 Oct 2026 16:34:00 +0200 Message-Id: <20261016-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v1-1-1f20b151431d@virtuozzo.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/yWNwQ7CIBBEf6XZs2uAKGn9FeOBrlRWI9SFEpOm/ y7qaeZlknkrZC/sM5y6FcRXzpxiA73rgIKLN498bQxGGauVtjgXfoT0ZEkVay5JUB8GY3uksaA jSktsWVBemIuT1o+DockorZyDdjuLn/j9U54hEGO/13D5D3kZ757KVwjb9gEV+habnQAAAA== X-Change-ID: 20261016-ptikhomirov-vstor-149268-cbt-account-at-rq-start-a592cf2010aa To: Konstantin Khorenko X-Mailer: b4 0.16.0 X-ClientProxiedBy: FR4P281CA0174.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:b7::20) To AM0PR08MB11804.eurprd08.prod.outlook.com (2603:10a6:20b:747::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM0PR08MB11804:EE_|PAVPR08MB9233:EE_ X-MS-Office365-Filtering-Correlation-Id: 7ebe8925-deca-49d4-bd17-08df2b928763 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|1800799024|366016|10070799003|376014|52116014|10067099003|18002099003|13003099007|261009223027099003|56012099006; X-Microsoft-Antispam-Message-Info: nEivJP+j+xGK7G2J2eAhLFuM/uyHO1kzcj3UCwKCTZJ0Y0RSZbVItIDCkFkOVpifaAMWgqzGnmAhDXMaeRmn3u3bH/Am8tvC3n6Liq1ssC7P9u8LZRmlU10r5rcBNy75hPTC8t/fZmsn/aGCO7uSFz0XbJTbDy8nq3JjGtQcwh6LU/TsCtkGl+7cf64poR3yOAyCkldVYxjLhHRyiaqsHQpsDv1zgJ1NimkR/LUx+29Wp5W9ORapfRhvIIAO6OH5wkLOG+n2biuM69t9hGWWGslidZOdttWFjPi+e3O7kLfYaPyLXW1BoFrNODUgkxKmqvQixDQ4SaVcgwjyn7gA7P1W8RTdz8Onh8ccCnTDSOcr/m7stjLSSxRwmh9TPMZBwYSd6dA2fyKLBxVyw1Uq5h2t7uod9sXv2at651u1I8iLKrTJWWHdXgvxXbR2JRGxhMAsz8AK2/YXXG0nIajSB5RpZyXl1yXbCmnB/OJ9hQfHgqdvxmpnaXcQZGdvHC41UZdp/luOj8mJohaguUFk73mpfgG5oTjEZ+ePUDv7ql1ma2Eol0eLxXMTYuppFi7LqF+UeBjZof2o519MDbIrMdeBQ8fG4/iidxMkcL1VdyDROBTUzdCIH3N3rV/dyI9P0MaY03m7xo2mMbMF3QA1vyJrqioQ/bMyAE+leSGUDUg= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR08MB11804.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(23010399003)(1800799024)(366016)(10070799003)(376014)(52116014)(10067099003)(18002099003)(13003099007)(261009223027099003)(56012099006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TklUQUZGS1hvOENaSUNDUVJCdGlZZkZtMDl6eWYwc21kdk1PMGRUZStocnQ3?= =?utf-8?B?Mk4wWXV1Wm9ZNXp2TlFJbmxzRzZnUytOTHRtdDBCMDNXRTZzT2FkdVphRzNS?= =?utf-8?B?My9UelNFWnVaSGxZdGhPS2xsdCtsaHBvZXAzQnczWFJlTFVZeFd1U0szaEUw?= =?utf-8?B?UXM3cW45dTViTlBnWTRkWjhCRVNyYUpqQnU5NndiM3Nnem5DZDJ0QjNzV0Zj?= =?utf-8?B?ekg3Ykdsdk5KWW1FV0ZhMEJHL2hXajg4TmhCcldOd1BCV1h5SE5uM0pXNEN4?= =?utf-8?B?Z0pmeG1KUVBraytIOHJUcDA5SklsYUp2cTZ4Ti9DUXV6SUs5b1JQOGdBOVFY?= =?utf-8?B?eHh4NHg4eENOb0JBL1E1TElIQzZjTE9UT0d5TTNVTXcwSlRqdWd2aDdvSXcx?= =?utf-8?B?c0FSek9nSTY1SW11UURTWW9BakoxVkpBRFhvaC9TL1pUSVk3VDZ3TkVReWR4?= =?utf-8?B?bWJZTHdPNHIzbitabDN6Z2dLR2U4a2dQNk1jOUdIWERKbkNnT3RHem5raTh4?= =?utf-8?B?NmxlcWU4ZHJGbnlvZWQvaFNyMnRXZmNoVHNHQURRemE4RWcrcWQxaE5KOHh0?= =?utf-8?B?WmcvL3dZZU9nb09adFdXMUVheXFSNUlxcnVsa2ZyU1dzVXhKcVlqWmNKbjBR?= =?utf-8?B?UjAxWFVyZVNxOGdxT1dvOHRhTlpSY3lBQytvQ0lFL3N6aVZWcElNUTJtSUcv?= =?utf-8?B?eUVCOWVpa0FqQTlUVjJoeERra2dTVGczV2tGTGw4SzRMcGJHdDVFY2pzQ0ll?= =?utf-8?B?bGVuZ2pZenJQeTFJejVJY3F3UFNYT0dDbDlndk9IUFBjZnZNQk80L1dBb0xy?= =?utf-8?B?alhKdnNkbTZ3bnN5SlZSWndQZHQvMGl0bW5uNFRFUjZ0VDRLcm84SURUbTB1?= =?utf-8?B?MW4xZHpGUm44NEJPOXZXY0N5QkF0OUFnSDF2NFNNN2I3RVljVkxsVDhmVDdR?= =?utf-8?B?RjhwQnJTS01MMXNGamZPanlOdnd4NUJBN2ZXQTZrcU82eVpuRk1QbTdkMEdo?= =?utf-8?B?Sy9OcGZiVkNVY3o0dEpFRUZHK2VxZVFzQ2FrckxNSUtGRnVMWThaWGFtMHhk?= =?utf-8?B?NzVWT0FOMWZLc2xzam9rbG13OU4zRElkemNFQjdDTHg1VzY1OVVPa2pONWtU?= =?utf-8?B?bWVaTWE0dVhWTHM2czdoR3ZydndjdXIvZFlsSWhkQzkrU3pVVUdDWnl1cEt2?= =?utf-8?B?Sno4ZGJRZnI2RldkdFk3aEk1SG5tbVZaNVlnREY0Z0lJZ3R0T3JUWnJNSzIv?= =?utf-8?B?bEZVTkVnU0JxeUxUZ3BjaGJpS2E3cmRZdnJiTDlNenF5bEJJOWc1a3JWQnNi?= =?utf-8?B?eElZSzVuYmEwTCsyQkhWY2pheTBYa0E5YkRVdHZWRS9wbUE2WHdqOVphdTM4?= =?utf-8?B?NG5ZU3MwWTVkZkJxOTJlRFFSS00zVmgxNGV0NmM3djR4b0Q5bHc5VVFFWDNM?= =?utf-8?B?UFZySUZON2RIRHkwRzlYVTZIZExJelJjdFZJeERadldSTVVkY0ovdldQVjRx?= =?utf-8?B?Tk9VUTk1cldVUWozM0JUamdiSmpwK0VoaUhrQmlWYVdFb3BxNzV1NmV5eGIz?= =?utf-8?B?Y0NYR0JZVVN0TXcyUEZ3d09Wc3dGcHlJWWVqZEVyWFVZcEtWUEZOcUkvcEVO?= =?utf-8?B?NzBHTnZPQXM3L3ZITGd6N3cxbXl1d0ZycnN2QnBvWXEwL1I1RTQyQU0yQndo?= =?utf-8?B?OVVlLzh4MXBDT0pKVGxMQ3NXSTU3MDJGS0xxV0hpcWVJempjL290c3kreHRl?= =?utf-8?B?SXpmVVc0M2hOOGx2WElGUktmY3BzSllQZ05zZkFScVArc0JtWk5MQWUyM0Jk?= =?utf-8?B?dzU4SklTMGtlUE9UMG5PZjBPclh3ZkdFZ0tiQldtTmMzZmVhOU14ZVNiNjU1?= =?utf-8?B?RnFZaS92TXQyTUgwL2tra2VjU0VtZGJhWTBEMmRMWnZIeFhYWmQ1UkZwTjJa?= =?utf-8?B?UldOR2w1aTZIdWwyeno1UWQ0UW5jeFlVQlhFWUt0czNYeTMwYXYxbjBQeGdO?= =?utf-8?B?MVNMejA1QncvTmlZUEJhNkJYVXg5dXMxa2M2SkhiNUdDV1YwMGZOem5WOFZL?= =?utf-8?B?RzJIQzc4SEFWV2t1Mzd5djg0SE1FM2trMzE4MEhrTGxJNVNhRWFQamxyYWlp?= =?utf-8?B?ZzdyYU5YWFBJTlNPOE5qYzBCV3Nmckx0bndLU1NFcjUvTHVTRVJ4WTZWTGZ0?= =?utf-8?B?by9pU3lzU0JOR1pibndLZjRMVjVkMk1vMjdYZDJsbGxWb2NxSUlYNEltMy90?= =?utf-8?B?WjRwNWlEcTBJVjZZRkh0c1ZkUklVVGhvaGlVdWM2TTMwL2dvTjJBeWRXRDNR?= =?utf-8?B?RVp2UVB0Tk5BRVVKbUNEWDdzVWppNGlhL2oySGNYUnZVVS94bzIrU0VURE5s?= =?utf-8?Q?vE5PmgA1o5BgaJB+gMpGlEKr+rvwWrBFreLRZ3ATNX8a9?= X-MS-Exchange-AntiSpam-MessageData-1: zg36HVibTlMCevOc1XCYXsfCre8DlZmFJQc= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7ebe8925-deca-49d4-bd17-08df2b928763 X-MS-Exchange-CrossTenant-AuthSource: AM0PR08MB11804.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2026 14:34:04.7868 (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: HzPuh9g9OPWhWpq/s2Pp5pONO13kKpax+frexdxJo00+4ozubjZruqJoMFw3qbonHAMoSmjrl7i9+mosEoqmY2zHekjjv5YDN4sz0rS1RAw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAVPR08MB9233 X-OZ-Fwd: true Cc: devel@openvz.org Subject: [Devel] [PATCH hci-8.1] block/blk-cbt: account a write request also when dm starts it 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 CBT accounts a write at bio submission. dm suspend of request based dm waits only for started requests, so a request submitted before the suspend but dispatched after resume is accounted before a backup point taken under the suspend (BLKCBTSTART, CBT_SNAP_CREATE) while its data lands after it. push_backup then saves the old data, and no incremental backup copies the new one. Account a write again in dm_start_request(). It runs under the dispatch rcu_read_lock(), so a missing bitmap page is allocated with GFP_ATOMIC (CBT_ERROR on failure). This only happens for requests submitted before BLKCBTSTART: any later write has its page allocated already by its submission time accounting. https://virtuozzo.atlassian.net/browse/VSTOR-149268 Feature: cbt: changed block tracking (for backup) Signed-off-by: Pavel Tikhomirov --- Fix CBT missing writes that request-based dm holds across a suspend, which made incremental backups taken with ploop-backup silently lose data. https://virtuozzo.atlassian.net/browse/VSTOR-149268 --- block/blk-cbt.c | 82 +++++++++++++++++++++++++++++++++++++++----------- drivers/md/dm-rq.c | 1 + include/linux/blkdev.h | 4 +++ 3 files changed, 70 insertions(+), 17 deletions(-) diff --git a/block/blk-cbt.c b/block/blk-cbt.c index 90219f58f1ae5..7513acd713b00 100644 --- a/block/blk-cbt.c +++ b/block/blk-cbt.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -63,6 +64,13 @@ enum CBT_FLAGS CBT_DEAD = 1, CBT_NOCACHE = 2, }; + +/* How a missing bitmap page may be allocated */ +enum cbt_alloc { + CBT_ALLOC_SLEEP = 0, /* may sleep */ + CBT_ALLOC_RCU = 1, /* may sleep, dropping our own rcu_read_lock() */ + CBT_ALLOC_ATOMIC = 2, /* must not sleep */ +}; static void cbt_release_callback(struct rcu_head *head); static void cbt_flush_cache(struct cbt_info *cbt); @@ -103,7 +111,7 @@ static void set_bits(void *bm, int cur, int len, bool is_set) * -ENOMEM if alloc_page failed. */ static int cbt_page_alloc(struct cbt_info **cbt_pp, unsigned long idx, - int in_rcu) + enum cbt_alloc alloc) { struct cbt_info *cbt = *cbt_pp; struct page *page; @@ -129,11 +137,15 @@ static int cbt_page_alloc(struct cbt_info **cbt_pp, unsigned long idx, } } spin_unlock_irq(&cbt->lock); - if (in_rcu) - rcu_read_unlock(); - page = alloc_page(GFP_NOIO|__GFP_ZERO); - if (in_rcu) - rcu_read_lock(); + if (alloc == CBT_ALLOC_ATOMIC) { + page = alloc_page(GFP_ATOMIC | __GFP_ZERO | __GFP_NOWARN); + } else { + if (alloc == CBT_ALLOC_RCU) + rcu_read_unlock(); + page = alloc_page(GFP_NOIO | __GFP_ZERO); + if (alloc == CBT_ALLOC_RCU) + rcu_read_lock(); + } spin_lock_irq(&cbt->lock); if (unlikely(!--(cbt->count) && test_bit(CBT_DEAD, &cbt->flags))) { spin_unlock_irq(&cbt->lock); @@ -160,7 +172,7 @@ static int cbt_page_alloc(struct cbt_info **cbt_pp, unsigned long idx, } static int __blk_cbt_set(struct cbt_info *cbt, blkcnt_t block, - blkcnt_t count, bool in_rcu, bool set, + blkcnt_t count, enum cbt_alloc alloc, bool set, unsigned long *pages_missed, unsigned long *idx_first) { @@ -210,7 +222,7 @@ static int __blk_cbt_set(struct cbt_info *cbt, blkcnt_t block, } } - ret = cbt_page_alloc(&cbt, idx, in_rcu); + ret = cbt_page_alloc(&cbt, idx, alloc); if (ret == -EAGAIN) /* new cbt */ continue; else if (ret == -EBADF) /* dead cbt */ @@ -221,7 +233,8 @@ static int __blk_cbt_set(struct cbt_info *cbt, blkcnt_t block, return (pages_missed && *pages_missed) ? -EAGAIN : 0; } -static void blk_cbt_add(struct cbt_info *cbt, blkcnt_t start, blkcnt_t len) +static void blk_cbt_add(struct cbt_info *cbt, blkcnt_t start, blkcnt_t len, + enum cbt_alloc alloc) { struct cbt_extent *ex; struct cbt_extent old; @@ -233,7 +246,7 @@ static void blk_cbt_add(struct cbt_info *cbt, blkcnt_t start, blkcnt_t len) start >>= cbt->block_bits; len = end - start; if (unlikely(test_bit(CBT_NOCACHE, &cbt->flags))) { - __blk_cbt_set(cbt, start, len, 1, 1, NULL, NULL); + __blk_cbt_set(cbt, start, len, alloc, 1, NULL, NULL); return; } ex = get_cpu_ptr(cbt->cache); @@ -248,7 +261,7 @@ static void blk_cbt_add(struct cbt_info *cbt, blkcnt_t start, blkcnt_t len) put_cpu_ptr(cbt->cache); if (likely(old.len)) - __blk_cbt_set(cbt, old.start, old.len, 1, 1, NULL, NULL); + __blk_cbt_set(cbt, old.start, old.len, alloc, 1, NULL, NULL); } void blk_cbt_bio_queue(struct request_queue *q, struct bio *bio) @@ -260,12 +273,47 @@ void blk_cbt_bio_queue(struct request_queue *q, struct bio *bio) goto out_rcu; list_for_each_entry_rcu(cbt, &q->cbt_list, list) - blk_cbt_add(cbt, bio->bi_iter.bi_sector << 9, bio->bi_iter.bi_size); + blk_cbt_add(cbt, bio->bi_iter.bi_sector << 9, bio->bi_iter.bi_size, + CBT_ALLOC_RCU); out_rcu: rcu_read_unlock(); } +/* + * Account a write again when request based dm starts it: dm suspend waits + * only for started requests, so one accounted at submission before a + * backup point taken under suspend may still reach the disk after it. + * + * Account bio by bio, as a discard request may hold non-contiguous bios. + * + * Runs under the dispatch rcu_read_lock() (blk_mq_run_dispatch_ops()), + * hence GFP_ATOMIC. + */ +void blk_cbt_rq_start(struct request *rq) +{ + struct request_queue *q = rq->q; + struct cbt_info *cbt; + struct bio *bio; + + if (likely(list_empty(&q->cbt_list))) + return; + if (rq_data_dir(rq) == READ || blk_rq_is_passthrough(rq)) + return; + + rcu_read_lock(); + list_for_each_entry_rcu(cbt, &q->cbt_list, list) { + __rq_for_each_bio(bio, rq) { + if (!bio->bi_iter.bi_size) + continue; + blk_cbt_add(cbt, bio->bi_iter.bi_sector << 9, + bio->bi_iter.bi_size, CBT_ALLOC_ATOMIC); + } + } + rcu_read_unlock(); +} +EXPORT_SYMBOL_GPL(blk_cbt_rq_start); + static struct cbt_info *do_cbt_alloc(struct request_queue *q, __u8 *name, loff_t size, loff_t blocksize) { @@ -545,7 +593,7 @@ static int blk_cbt_snap_merge_back(struct request_queue *q, __u8 *name) if (!page_main) { ret = -ENOMEM; - if (cbt_page_alloc(&cbt, i, 0)) + if (cbt_page_alloc(&cbt, i, CBT_ALLOC_SLEEP)) goto out; page_main = cbt->map[i]; @@ -734,7 +782,7 @@ static inline void __cbt_flush_cpu_cache(void *ptr) struct cbt_extent *ex = this_cpu_ptr(cbt->cache); if (ex->len) { - int ret = __blk_cbt_set(cbt, ex->start, ex->len, 0, 1, + int ret = __blk_cbt_set(cbt, ex->start, ex->len, CBT_ALLOC_SLEEP, 1, &ctx->pages_missed, &ctx->idx_first); if (!ret) { @@ -765,7 +813,7 @@ static void cbt_flush_cache(struct cbt_info *cbt) if (cbt->map[i] != CBT_PAGE_MISSED) continue; - ret = cbt_page_alloc(&cbt, i, 0); + ret = cbt_page_alloc(&cbt, i, CBT_ALLOC_SLEEP); if (ret == -EAGAIN) /* new cbt */ goto try_again; else if (ret) /* dead cbt or alloc_page failed */ @@ -887,7 +935,7 @@ static int cbt_ioc_get(struct block_device *bdev, struct blk_user_cbt_info __use cur_ex->ce_length = ex.len << cbt->block_bits; if (ci.ci_flags & CI_FLAG_ONCE) - __blk_cbt_set(cbt, ex.start, ex.len, 0, 0, NULL, NULL); + __blk_cbt_set(cbt, ex.start, ex.len, CBT_ALLOC_SLEEP, 0, NULL, NULL); cur_ex++; ci.ci_mapped_extents++; block = ex.start + ex.len; @@ -971,7 +1019,7 @@ static int cbt_ioc_set(struct block_device *bdev, struct blk_user_cbt_info __use ret = -EINVAL; break; } - ret = __blk_cbt_set(cbt, ex.start, ex.len, 0, set, NULL, NULL); + ret = __blk_cbt_set(cbt, ex.start, ex.len, CBT_ALLOC_SLEEP, set, NULL, NULL); if (ret) break; cur_ex++; diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c index 20f495bf5399d..9354e1e0c5a2d 100644 --- a/drivers/md/dm-rq.c +++ b/drivers/md/dm-rq.c @@ -444,6 +444,7 @@ ssize_t dm_attr_rq_based_seq_io_merge_deadline_store(struct mapped_device *md, static void dm_start_request(struct mapped_device *md, struct request *orig) { + blk_cbt_rq_start(orig); blk_mq_start_request(orig); if (unlikely(dm_stats_used(&md->stats))) { diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 1284bb0e4ebc0..848fac73e451f 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -1627,6 +1627,7 @@ static inline bool blk_crypto_register(struct blk_crypto_profile *profile, extern void blk_cbt_update_size(struct block_device *bdev); extern void blk_cbt_release(struct request_queue *q); extern void blk_cbt_bio_queue(struct request_queue *q, struct bio *bio); +extern void blk_cbt_rq_start(struct request *rq); extern int blk_cbt_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg); #else /* CONFIG_BLK_DEV_CBT */ static inline void blk_cbt_update_size(struct block_device *bdev) @@ -1638,6 +1639,9 @@ static inline void blk_cbt_release(struct request_queue *q) static inline void blk_cbt_bio_queue(struct request_queue *q, struct bio *bio) { } +static inline void blk_cbt_rq_start(struct request *rq) +{ +} static inline int blk_cbt_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg) { --- base-commit: f5d1fdcfffe101fe2bafa7df09d95d2e811c5c5e change-id: 20261016-ptikhomirov-vstor-149268-cbt-account-at-rq-start-a592cf2010aa Best regards, -- Pavel Tikhomirov _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel