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 9A24A80474 for ; Tue, 27 Oct 2026 14:25:34 +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 69REOIdb028540; Tue, 27 Oct 2026 17:24:18 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69REOIdb028540 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="eJFF3o6T" Received: from mail-pg1-f200.google.com (mail-pg1-f200.google.com [209.85.215.200]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69REO1k0028498 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Tue, 27 Oct 2026 17:24:02 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69REO1k0028498 Received: by mail-pg1-f200.google.com with SMTP id 41be03b00d2f7-cc4216aee8fso4752865a12.1 for ; Tue, 27 Oct 2026 07:24:02 -0700 (PDT) X-Gm-Message-State: AFq9FYLwdQ/fa4tlvCLUQuiEzmGWTbbXHdGOu+OvbffIt1xQy3SgbwiA l4cDR9FZNJsITwRCfpsyT/vSx2WHtuR9+YB2fHWdQH7Y5qs2hIpnNRVkqX6PjSpdwHIqF10jszi eiPKh99dygZuqoAH6okVmzHHYpFUpYa7EKFqnBTYZ2WBPX4132umZMw== X-Gm-Gg: AYBFou12sspR/Dxadv+XxG5dsX919eONFYwVX8a0DDLvP6VjHigG/dq+eSfnLB8FZGH jolyutKLkPexnVUuqLRrIKshLj6e4Iu4vYh+/KDwhK6b23uJNteZbgvF69TDmmjYKhODa3yV3Ie jygxhe4Be9NOF420CeJjbZaHXE8eYC4F618YNGU5rtaqdz1pRFG6JTUzuY6wA19hxr5Yu1dQHcB jaWKYubmDz0VDJ3c+66BB4BXFFdVmFYuO81QjSTYtvHBzQ11v7sy9t+J5OIRZA1ogl6HUqA12iP 7UijugI9IVFdHHnn9GCRJLBPIwnFrVWsIHFElHr9E5ZhzuygUqWDiFiCG6i8BOt+d4bVu/UL5a2 m8UEsgsg+YrJgIPgIK8mZBIN4YQ1LEy03oCRY/3m1+TsurJmOJWzOKENNj+Hnq29lKLogpyhs9n A1mzAYrR2a7GKwjDmY4irygDeQ X-Received: by 2002:a05:6a20:918e:b0:3e1:885f:b49d with SMTP id adf61e73a8af0-3e7bfe01f37mr8836524637.52.1793111041123; Tue, 27 Oct 2026 07:24:01 -0700 (PDT) X-Received: by 2002:a05:6a20:918e:b0:3e1:885f:b49d with SMTP id adf61e73a8af0-3e7bfe01f37mr8836494637.52.1793111040397; Tue, 27 Oct 2026 07:24:00 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1793111040; cv=pass; d=google.com; s=arc-20260327; b=OzOQJ5AT1WIgrEhJx4SAk6XivPGJ/9LlGBpdTA0Y9NAcECB9WgXtrEqjKQCAL3hvsI ovWFaO3VDlWMwdqqmZmsvBvOiRvYgLAzTxUMY4JhUWOfizgwkXXYKNrCfFJDmna0PP7H A4kFaxWxu450+NelwfKixsSgoxLZD00NZIC7wgiBpFXOLymJRUKOlapg11EvirtG2N4t yAkXF22TmNq0wKM+EO+jJe8gcB9kNNmSJxmmpUrflsaHrs9pKKH2gwiZwCy84klu+bnN PXffQbNbadAVoZfbFPMTzzkkZcYlwjffict9ma7HRuSq2YI3HfUVMsTWQ5h3M7/zeHG8 E1og== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=mime-version:cc:to:in-reply-to:references:message-id :content-transfer-encoding:subject:date:from:dkim-signature; bh=9z4iFqoE3iM32fT/gK+KTeIvnPATkPwW4peUaVodSpI=; fh=y3TfVeQA9QYtIzD5Inxiyys5ebBfyOgjQPZaP/+mSiI=; b=pZHxW4PaJ/JznCSp/3LQ4crCXngPhl7wgifoieklrVHLbQFtgwCrVOwL/wl2UbNY5w EC4Vo7epIXll533QEddrVA6E6i6gVvriyuU+IRCGAyzWMbAyKtwRf7bvyfgwuT5Hv/AU nfl0hZv5JVtBcSeMGE6X7X7+ryJflyfcjS9oGV0Oa4MYUiG2vh/U0l5nxv5vrHCuhJAP agWsdLYcSAkEmEHgKV1P4kVaeE01k95FanEKVDSpahdDcQEdVx+rIJ/PKFkVNr5f6t1N cm0XvPTnhYibuZXMwCcI7Tz3hD2galzecJfhB3gk8WsAGY1MrNWndpP9Brn6WFzodfgp wHpg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=eJFF3o6T; 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:c201::3 as permitted sender) smtp.mailfrom=ptikhomirov@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from AS8PR04CU009.outbound.protection.outlook.com (mail-westeuropeazlp170110003.outbound.protection.outlook.com. [2a01:111:f403:c201::3]) by mx.google.com with ESMTPS id 41be03b00d2f7-cd8ccd0fb41si12944089a12.304.2026.10.27.07.24.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Oct 2026 07:24:00 -0700 (PDT) Received-SPF: pass (google.com: domain of ptikhomirov@virtuozzo.com designates 2a01:111:f403:c201::3 as permitted sender) client-ip=2a01:111:f403:c201::3; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b=eJFF3o6T; 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:c201::3 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=zR+4ewvdRAgvhiMhC37Ql2A+q9R8GnMLF/B4T8cvcVlr7kZPSm5MlXl2DqTAXwB9qr5RhZEhJC8+l4Z7JPEv/7pL4nVUodLI68dnMQ/Xka8c1LB31amx1pLODDG5jZF5Jidfv44Lt5w3ypZwf3q6QZhbXNg8DC2zf++H6cAEcbvxs0/VkqwosFQhoTcjw2qd/N2Rk3Vs/sYJcv52iz1cfxb2/8/FYNv3/HxKsY0nWSO22d4spNYPO0NTR9GUriP4+mHLEP8ynNaGvVSB0TJDl8MVx0M0c56rrZYMX99SJKxKgwYlE9XkO2bZFxtQ7HbE0cy2MhFtD8Xzeal4AV7yBw== 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=9z4iFqoE3iM32fT/gK+KTeIvnPATkPwW4peUaVodSpI=; b=sjTA5J4OU12koILG0gYrAjHiIoWSFXDEqhtZ1/vTNEFdW3LRAZ+E3BOQhuxf7dEve6SH3cJJVdGtmVZBkTdn/2E6jr4a4atdg1UBIJGQwJIiGOTODkjnB6eKMZmQhYV32whmPRBN2jSHneEA3QX3sZV988BPafmxiV+Jc4Gw0g4jwqVql2NE6ZbyAdgKFyNbZNhZmORmA8lEFkF3bIWnZKtCyslBxpdEgXzt6EV3jsuBRvBeoVsIlIDuxKwM2CN4Ac3FFVRK61WVWNcLN4lECZyQThD5dH1BPZKdDeD5oQg6P00Gwvgx/tarlYqzYjue3q2rxMgtG6SK9eZddNC0CA== 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=9z4iFqoE3iM32fT/gK+KTeIvnPATkPwW4peUaVodSpI=; b=eJFF3o6TjyEsaHVSOdnbzwA/ZHa5Wjcq4zjTY/XCBuNhENOCRr1gKimkG/BoEFES3DFxzHIrZ0PU1R9Eto5/1fNB9oEQJ/EbNY3R5bAW5s/cYzQHjhua74yzx765Y1l5Gdjmfrm6rbPYHpINyy7fmi+paGfQXPr5BCaegtA+KCHGBJNqwoxOKSukzbRQyGvJAKpLzd3B3FqcqaVo+bU5IavTvgmWqv9bLStoHuCgQ2XKdOoPPDn0HTiZZMhdnEE1arGNLyhCe8rsosufUze3TBts+igqAoi2k7atFAHlSEh+W5nc6SMWKhi8sNbZ6WfDOZMD3sZHp/lFSxofa8z8YA== 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 MIWPR08MB089781.eurprd08.prod.outlook.com (2603:10a6:290:ab::21) 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 14:23:57 +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.021; Tue, 27 Oct 2026 14:23:57 +0000 From: Pavel Tikhomirov Date: Tue, 27 Oct 2026 15:23:51 +0100 Message-Id: <20261027-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v5-4-88dccc74b48b@virtuozzo.com> References: <20261027-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v5-0-88dccc74b48b@virtuozzo.com> In-Reply-To: <20261027-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v5-0-88dccc74b48b@virtuozzo.com> To: Konstantin Khorenko X-Mailer: b4 0.16.0 X-ClientProxiedBy: BE1P281CA0323.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:87::8) To AM0PR08MB11804.eurprd08.prod.outlook.com (2603:10a6:20b:747::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM0PR08MB11804:EE_|MIWPR08MB089781:EE_ X-MS-Office365-Filtering-Correlation-Id: ce853c3c-27db-44c1-5b39-08df3435ef01 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|366016|10070799003|1800799024|52116014|376014|56012099006|261026140227099003|22082099003|18002099003|10067099003|261021121427099003|261021123027099003|261009223027099003|261022105027099003|261026121527099003; X-Microsoft-Antispam-Message-Info: 11oAtMPV4YL9l19Y4YU7EqtlhaiUyUEJMednosUsSy6kGfh+AvUSXxZgIzksUNuUk8pFnr6fIwS6AnzGY1qhaKeCcA3EXkB3VgLKj2sX95dD67iZMp1Q3H0SjoQboRQ2hL5ukpiq0R1RopPkbLzvUhZKaimATsuP0RLsYOJtSuE7m+UWtyHm8cvL+e9KnIRVYOSpLP7/Ebb4XM6E1anAg/Jw/QjvFEU5G3tXSpqMTR2knHxR2uZn4/5lUtet53+W7e0nI1Vl4OBi4Rlir84A2AMylK0BdUsJcuQpmEz7Ty2+/Vea4DPNWRY0Di2b/4AbvTGZ1elw1TLW19fujT1s4ORoBbGwAjfObltff3ZKjP9LYPV4dfTeTe+fn7hPXhjItyNSaYIJ+jh8dKD8bzLRh4Uy3pegIXZ7ywzqBaj9jC5ehWlG2NUNK/z0rTf/u0AyxzLN+5F1hZqakBQtbZxAAR/gx68QcOm5r0TSQflw7oy3SodirSi75vsKtuwtZNBeSVjq7kSQwVADMO3lP/LObsGUcQaZXVM65m2B5qIpRwT04GpiajbJBKD39JTvIyO9Cr2I6Dca2j0mUc1gZL2Tfr1yU3OvkkdEBgFqlxurwXc= 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)(366016)(10070799003)(1800799024)(52116014)(376014)(56012099006)(261026140227099003)(22082099003)(18002099003)(10067099003)(261021121427099003)(261021123027099003)(261009223027099003)(261022105027099003)(261026121527099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WlpkZzZWbzNBWU9oUXhheDJtOC95ZVcvUEVHanBPU09jT25RT29sdWFib2dn?= =?utf-8?B?bS9LK1lndGhjNGhOVWN3QXlnRVVJZnpKYzRDR0MxMkFWTjNncFVxS3VKR3BP?= =?utf-8?B?cS9VSjlhd3lpdG5kTHp4Rjk4YkVraGtaVUtyV1E3bDVwa2ltMUNwMy94ZFB5?= =?utf-8?B?L281dUlYcVNvQkF2cDhtNkRnVm84YVpSbmxySnQxRllwTnd2Wmg0Z21MT2lZ?= =?utf-8?B?WC82b0RsMy9xNmkvcndiY3RqYUVHZ1VhaC85OC8vMU5teXpsc2RDQ2dNWkQ5?= =?utf-8?B?cW1uNXc4b3M3WUgrb1pTWTNIVGtwVko2Z29yclZMc01qT2NpNEwzR1pzOVJj?= =?utf-8?B?MEhOWDB0RVFNNExHOGR3cEZyc04rZmNSMmFBVXpROTJsaThhQ2RrcUdaelk1?= =?utf-8?B?UEw4d21lRElHVEZRZHRSb0s1S2JmSG9KV3VVRDhnbDBzRHZFK1kvMXQwWHZy?= =?utf-8?B?T01ubWNTWTFEbnExT1FFUW0zbWYwcU9lcXFia29waFlpZEk1UUx3bzBuZ0Mx?= =?utf-8?B?OGcrZUNLb21PY2xtVW5LcE5DK3FTc0VkaWhGcWovNjBDVlozVWdWL3JhZEdJ?= =?utf-8?B?OWNSZFRpcExmV1ZETkdnTmpDM1FmbVRQMnRINmlNQktiUVJzRzRJT0I1T3Nk?= =?utf-8?B?OUlRUE12QVN3YUlPRDNzOHg5TkkwdE1LUlZOMHdnNzh5SVU0eTYvQWFZOUNX?= =?utf-8?B?WW8yejFMRitOV0lHcFNNZjRINGY1WHlIYXBYd0dUa2JPQm94K1JqR3cxR0pX?= =?utf-8?B?MnFDLzNTem5qWGpHWm42SFk0WENDbk9tQURCaThyWG5vQ1hETFE2N0NNVkF2?= =?utf-8?B?amhjRUxSVXhPNTl5dElXQUdKUktpMEFyN2hZNTU0WmlKSW1CRzJtMTFJVEVK?= =?utf-8?B?SSt6K1hPNGM3SGR6dnVmWkV4em5ZQWFKUzNOZ0dabytjVk4veU5mRFNlTDhP?= =?utf-8?B?MkNVUnFleHFrU2k1MGFkZDdzREZlRDZTdEFzWXE3Nk9wdjVYNE1PV1NKbXBS?= =?utf-8?B?OFlGamUwdVdhRmxQVkI0dnNhTzVZVWZEL01zNC9CSDZvcjRBeWJZSnBTVkNR?= =?utf-8?B?TTBwL2hHU1hpL2taUTh4OHJ6bWUzVDNhV2Z3MlRwZXh4cm1zbFBydmxnN2ND?= =?utf-8?B?WnRaYnRCdklOeWZ0ZE1zaHpiU29LVEhTNmhmdThWWmQwZjV3YlphTmR0bnRz?= =?utf-8?B?c3FFQmsxRTlqczRWWGoxZFJxbzlYbk92VHpLWVgvSEQ4Sm16aSt0TDgxZm5o?= =?utf-8?B?WFNwenJRcW1rK2ZkY3pESEhKSWlCbnl0TjhwUXl4Y2xPdHVYaVFHdnpWMnJT?= =?utf-8?B?eEk3d2k1dGxwMHp1Z09odnFCMHJZdzFVODBndmZQd1NkL21UNkdqazhRcmF3?= =?utf-8?B?YWk3aGJjNkV1U0h0K1hkVzNEcHo5cmo1TzVuMzI0czdiV2huOVFTQkNFODZX?= =?utf-8?B?L1JRSHkwWXJ5UFYzSzYrZGo0M2hFWlNXZWUrNkJxSUZ3MDREL3hSU21WSjhE?= =?utf-8?B?bUhBZEd4VlNZTkFDRW85d0lJbElLZ3FZNG1tNGdLMVFyZjh5UnIyS25SblRx?= =?utf-8?B?QjlURmgyRHI0ZDBFMEJFVGx3SWlWR3VQQTZCWjB3THFDdll3cmZHaGNWeFo2?= =?utf-8?B?UFk5L0NiK05nSWRjbEk1MTBnN2VuRUVMaU81Z012T3ZZdVRRcUlVSkJzaGl3?= =?utf-8?B?V0lIb29xTlUvQTNNeHM2bnZudGJ4eWNDRjdmUC9EM1gyaTFlSXBwRlNZZkVN?= =?utf-8?B?Z29jWElRdnEwYmZLcUQ4djZpcis4bjU2ZlFoclFzRjUrb3JnQ2dYckZHcUhG?= =?utf-8?B?K1dBUVFHUDFROVpGbFdTQUY3bnZMd2RRMzUvRWpxVlVTZUFuZ2hCR3J1RTNt?= =?utf-8?B?eTh4eExVb3REaWNRWS9sSFJxRUJLSlJNeDFSQUU2UXh3WDFXUGtzRXRQeXps?= =?utf-8?B?eDdGU0tEYVRzdkg3YUZCRGdqZ2RsTVFUNm5LaGoyRUdOM1NNUTh6UnpGYmE2?= =?utf-8?B?emt1TmdxdUJlaVByM0tObDNEcmtyYm1vNTB5Y2g2eEdqNUVtUU94NTVTRXhC?= =?utf-8?B?MlRBRHl3UnhyQXpnVXoveThDWGNTaEFFYnA2QWJXNTV0QnFoVTJJekJQeFN5?= =?utf-8?B?dU9EdmwxTUxYNmJOSmlDZkpuazNHc01uRGZvTUJmR1oxV1FJT0puYStRQVhl?= =?utf-8?B?M1NpWFRJaG9HdEx6bWcweTRSOTVHemE2SlVhTlg3bnh2Q3o4UHM3NTlWWlFa?= =?utf-8?B?S1FFTHhUTXYzN1JXbTU0UUJ3ckt4SmF0RnVyenVmeDRnaUR2aWprNWpOWGxT?= =?utf-8?B?L3NNNVRJV2dTeWFUdlBVWk9IM2MzTG8yUm1SdEpESm5WRXh4dGlDQ2trd2dn?= =?utf-8?Q?wvzGDHLmqjBdmjdJovhAhf/iTxW+fL9CKjXiXe3NbqPfz?= X-MS-Exchange-AntiSpam-MessageData-1: oqANonirQsN1k9kRjtiWJ058uJLnerrK6IM= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: ce853c3c-27db-44c1-5b39-08df3435ef01 X-MS-Exchange-CrossTenant-AuthSource: AM0PR08MB11804.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Oct 2026 14:23:56.6254 (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: St7tcyHVlGgKej18N7/vFv8PAZAASCb+jlbzbn+cWcbAYGzqn6sOtKvrWE7b781hh0Y+BaJ/lcC0u5ykkys8eK0Sws8Kvlw7R1vPdxhE9DU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MIWPR08MB089781 X-OZ-Fwd: true Cc: devel@openvz.org Subject: [Devel] [PATCH hci-8.1 v5 4/6] block/blk-cbt: walk cbt_list under SRCU 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 blk_cbt_bio_queue() walks q->cbt_list under rcu_read_lock(), but a cbt may need a bitmap page there: cbt_page_alloc() then drops the RCU lock around the sleeping allocation, pinning only the current cbt. A CBT stop or resize meanwhile can unlink it and free the next one, which the walk then reaches through the stale ->next. Walk cbt_list and release cbts under SRCU instead, whose readers may sleep, so the allocation no longer drops the lock. https://virtuozzo.atlassian.net/browse/VSTOR-149268 Feature: cbt: changed block tracking (for backup) Signed-off-by: Pavel Tikhomirov --- block/blk-cbt.c | 50 ++++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/block/blk-cbt.c b/block/blk-cbt.c index 01114362bb2bc..c87c7624f3800 100644 --- a/block/blk-cbt.c +++ b/block/blk-cbt.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -31,6 +32,8 @@ NULL : cbt->map[idx]) static __cacheline_aligned_in_smp DEFINE_MUTEX(cbt_mutex); +/* Protects the q->cbt_list walks, which may sleep to allocate */ +DEFINE_STATIC_SRCU(cbt_srcu); struct cbt_extent{ blkcnt_t start; @@ -102,8 +105,7 @@ static void set_bits(void *bm, int cur, int len, bool is_set) * -EBADF if cbt is dead, * -ENOMEM if alloc_page failed. */ -static int cbt_page_alloc(struct cbt_info **cbt_pp, unsigned long idx, - int in_rcu) +static int cbt_page_alloc(struct cbt_info **cbt_pp, unsigned long idx) { struct cbt_info *cbt = *cbt_pp; struct page *page; @@ -115,7 +117,9 @@ static int cbt_page_alloc(struct cbt_info **cbt_pp, unsigned long idx, } else { struct cbt_info *i, *new = NULL; - list_for_each_entry_rcu(i, &cbt->queue->cbt_list, list) + list_for_each_entry_srcu(i, &cbt->queue->cbt_list, list, + srcu_read_lock_held(&cbt_srcu) || + lockdep_is_held(&cbt_mutex)) if (!memcmp(i->name, cbt->name, sizeof(cbt->name))) new = i; @@ -129,15 +133,11 @@ 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(); spin_lock_irq(&cbt->lock); if (unlikely(!--(cbt->count) && test_bit(CBT_DEAD, &cbt->flags))) { spin_unlock_irq(&cbt->lock); - call_rcu(&cbt->rcu, &cbt_release_callback); + call_srcu(&cbt_srcu, &cbt->rcu, &cbt_release_callback); if (page) __free_page(page); return -EBADF; @@ -160,7 +160,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, bool set, unsigned long *pages_missed, unsigned long *idx_first) { @@ -219,7 +219,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); if (ret == -EAGAIN) /* new cbt */ continue; else if (ret == -EBADF) /* dead cbt */ @@ -242,7 +242,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, 1, NULL, NULL); return; } ex = get_cpu_ptr(cbt->cache); @@ -257,22 +257,24 @@ 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, 1, NULL, NULL); } void blk_cbt_bio_queue(struct request_queue *q, struct bio *bio) { struct cbt_info *cbt; + int idx; - rcu_read_lock(); + idx = srcu_read_lock(&cbt_srcu); if (list_empty(&q->cbt_list) || bio_data_dir(bio) == READ || !bio->bi_iter.bi_size) - goto out_rcu; + goto out_srcu; - list_for_each_entry_rcu(cbt, &q->cbt_list, list) + list_for_each_entry_srcu(cbt, &q->cbt_list, list, + srcu_read_lock_held(&cbt_srcu)) blk_cbt_add(cbt, bio->bi_iter.bi_sector << 9, bio->bi_iter.bi_size); -out_rcu: - rcu_read_unlock(); +out_srcu: + srcu_read_unlock(&cbt_srcu, idx); } static struct cbt_info *do_cbt_alloc(struct request_queue *q, __u8 *name, @@ -554,7 +556,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)) goto out; page_main = cbt->map[i]; @@ -607,7 +609,7 @@ static void blk_cbt_update_cbt_size(struct cbt_info *cbt, loff_t new_sz) in_use = cbt->count; spin_unlock_irq(&cbt->lock); if (!in_use) - call_rcu(&cbt->rcu, &cbt_release_callback); + call_srcu(&cbt_srcu, &cbt->rcu, &cbt_release_callback); } void blk_cbt_update_size(struct block_device *bdev) @@ -695,7 +697,7 @@ static void blk_cbt_del(struct cbt_info *cbt) in_use = cbt->count; spin_unlock_irqrestore(&cbt->lock, flags); if (!in_use) - call_rcu(&cbt->rcu, &cbt_release_callback); + call_srcu(&cbt_srcu, &cbt->rcu, &cbt_release_callback); } void blk_cbt_release(struct request_queue *q) @@ -743,7 +745,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, 1, &ctx->pages_missed, &ctx->idx_first); if (!ret) { @@ -774,7 +776,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); if (ret == -EAGAIN) /* new cbt */ goto try_again; else if (ret) /* dead cbt or alloc_page failed */ @@ -896,7 +898,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, 0, NULL, NULL); cur_ex++; ci.ci_mapped_extents++; block = ex.start + ex.len; @@ -980,7 +982,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, set, NULL, NULL); if (ret) break; cur_ex++; -- 2.55.0 _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel