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 AFD5880E65 for ; Wed, 28 Oct 2026 10:12:53 +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 69SABgv9018351; Wed, 28 Oct 2026 13:11:43 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69SABgv9018351 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="X0i/CrLu" Received: from mail-yx1-f72.google.com (mail-yx1-f72.google.com [74.125.224.72]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 69SABVin018300 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Wed, 28 Oct 2026 13:11:32 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 69SABVin018300 Received: by mail-yx1-f72.google.com with SMTP id 956f58d0204a3-6795a39e53fso2819957d50.0 for ; Wed, 28 Oct 2026 03:11:32 -0700 (PDT) X-Gm-Message-State: AFq9FYJY3anlTu51v6Mb4UuGfQemPL5kX45DlRCr1KvefnniVxOlXYzD XJYcWWilYg9oPvApx5AOu1Tg7LkuZ7G1DQkNnYalhJldVe/UCjf2gc/+NsKWyPVNexdBnCwB1k0 B8mmb/3PGxeRrBvd3Ow6KCx1iFxx8brEgge20j/uScrfbUNQUv0tBUg== X-Gm-Gg: AYBFou1zjeYD+AGQqwDvXkqefxQ3ePpw1znLNXd4VEEijbg8lnn5ErlyepacVgKu7mL szbk4n00L7bCZTVHSQBPxpqgCaT8+UIiGT8se17b8XNqDowk/E9Rg0takxUbnq3/jdGKjHLouQY RXNOU+x4EBDcypqhXwhqX6X6WzSCGyNilLlQK5PbMvU8QC720AJ1zfTOsohMpHXjLTyuTIYNieq T/RNfiVpWBo8QzhIaOGXIOw2d9FSwyUwKVyBK9Yt1JbnWK7TKvsV/D5iRB26HYkqLtHSDkYwc2s 1Nb4iYlczjd/ABRQiV36zRM6gbYwjtS7kw5Lxi41gw0+LgUJIE7as1xA9WmIO3/FBdcxnkDK89x wWTVZiqBtvhgA44PUiyQzHc8+9HJYZzg86jE3q0tP9VrYAYKMQDuwr24LVNUIOa9Jq40NhrFwou 32wxpXVIdMLeHk1kH7vSMSiIBei/LZ X-Received: by 2002:a53:c787:0:b0:679:a89d:d23d with SMTP id 956f58d0204a3-67a6dfd8d1fmr2738059d50.11.1793182291404; Wed, 28 Oct 2026 03:11:31 -0700 (PDT) X-Received: by 2002:a53:c787:0:b0:679:a89d:d23d with SMTP id 956f58d0204a3-67a6dfd8d1fmr2738052d50.11.1793182290714; Wed, 28 Oct 2026 03:11:30 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1793182290; cv=pass; d=google.com; s=arc-20260327; b=QQQAMYJl0mTgqI9UdYNmuE8WujEjq5kUqemzxttai9qkg34MncULn82pcgbbZPAo41 AGph74flizQYRhVxWo92zpzJyuWD/gU7lWytyIv36ZlqsKgj1mMXN4TdNJgeycVZQLsi dkB89qS79c1uJp7g3drJSvdqVXyEIqFqVO0SLq+JSaoUcKN4XRZAMg3jn61Tnipt9uqB Yc4W61PvQVz/vxEKbKTHKk/gNukXaJv9HWKeXu5fq/MXYmmP17UpER8LbbxJsgkxm9Pq WE1Kui2dQTxvAz9RXnYwpUVXvy6oDJwhdGbFY333w3C3C9tcUy1kaaN5TTYf2WD3yA32 SoBQ== 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=o73RLWJ6QEPJ8hK7shJaZ/zyJu8f/ERidhP9FhEjyNc=; fh=y3TfVeQA9QYtIzD5Inxiyys5ebBfyOgjQPZaP/+mSiI=; b=k7joHahl6LbkKMNoc85+o2ZejvB5BTeC7nn7POLwtEazw5tEph8ofcC+QvW8RsDPP+ sJ7avQA52H1N0NSeNDQOVt4GBi9+kzXqUiFGbvZllVEPdx0UBr1qF3buSTOnR0sSkgeg Y1jnMBHsstIuzZk9yAj04Jkg48KoU17eXXd89YXHLv7YJBBgt8ipOt88wbDvgZG92Vrg CcecAAfLkLe0QM7svo7UH0p19ljvtAzlwKVgLW1BowwCC8k+AU4OzBpwZ+xrUoXrzZD1 egg8dayv8hKj8090kVeWVvQD/S5+s7NIXW4nnRhOJmh5bHEWci6Ca+mDdRFGNVvNo8BV W1RQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=selector2 header.b="X0i/CrLu"; 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 956f58d0204a3-67a7a146ecdsi2182507d50.241.2026.10.28.03.11.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Oct 2026 03:11:30 -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="X0i/CrLu"; 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=nWFGfVaDIswGPzZI5LzQVgbkvhHx1k65VRLFGpR1j9F1R6GLCIbIIPA1SoFjSCvPiEHrUvF0xS+Me7HJAAhDTldGbvCHAZZa7zAXD/eTj6QkfTCAv6F/aA3QEbheFyU/R9NjEnNh2NwHf14f5pHqk/SDK0b/rkgSXrBDEgns/zRmSmfK/C187NRZ4GHBUxxlnILsqjItxeptYWorYmE9tzf7EA03IjaqEH+HeIxk0x0C0x6R5jFOYXpHIr7sjcgWW3LL24QZFxxJZngzFdnT3EV+m200uEWMJJwETfSRfh8/q5sugAl4xaHcmJRlooqKH3a/9FfuWS9yTtBpGoSfQQ== 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=o73RLWJ6QEPJ8hK7shJaZ/zyJu8f/ERidhP9FhEjyNc=; b=k8a8P4Lmdjx0hu8cjDYYK5MpfnMdWqfXiSRs31AJZPrpdQGV2A+SAQg2n2oaRIRHP6NK/wqYVamYURyvmrjparrpAX4QrzSWdg3z1OH/F/VGBUR9b+NUuaolos6IfBtEeRYR6R1LIfRTFNb1mbdEKJx8fI9B4HtcXEBwpZsv3kfEgx1OQclxs2uOi5x5cCFs+AWnHVckZYmvUEsx8Q553JEY+3h1tnHtV7ST4UJ0jn3FytTTZIWEKMwRv4Ru8Rr7oFf+MbkIkmZ8DrfnwNVmpvPkI3dXxgF0TNuIu/QoOZ4V8Zcv9J1TKTMgDUxJ2zU20RrE89HK76BF0Bblv+2DkA== 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=o73RLWJ6QEPJ8hK7shJaZ/zyJu8f/ERidhP9FhEjyNc=; b=X0i/CrLuU2GQiqJIZdSWAKB7JVXLMW3s5Gb01/VYaxfDWROoSQ7C3rRxyM2WxxmJgO4EPbGEftMMn9xcsvKKDC9z0In3EjNqDzm32EemdL8gcWJ55ce5JS9tKpiOAnlWo75PSju5qetaGaxYMPHQ1H9CF0BvM+6B6WcTdCUXMZo5egSad72uQRNpS7bD4u5oX8NugDmMb5buoQ4vuFVlqPcsec8KyqI40ixEzF9en2m92w/M2DRyPBEHz1K2vWXmy/L4x7ua7299vtNOA4fD499fjSWFGAMh3QW33/FuzXjZamzZFgH8yG0pQnHhA9sofciQ8xhl9BS1ce7SX3xhVA== 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 AS8PR08MB8802.eurprd08.prod.outlook.com (2603:10a6:20b:5bc::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.569.8; Wed, 28 Oct 2026 10:11:28 +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.0569.007; Wed, 28 Oct 2026 10:11:28 +0000 From: Pavel Tikhomirov Date: Wed, 28 Oct 2026 11:11:27 +0100 Message-Id: <20261028-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v7-6-5c48672191c2@virtuozzo.com> References: <20261028-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v7-0-5c48672191c2@virtuozzo.com> In-Reply-To: <20261028-ptikhomirov-vstor-149268-cbt-account-at-rq-start-v7-0-5c48672191c2@virtuozzo.com> To: Konstantin Khorenko X-Mailer: b4 0.16.0 X-ClientProxiedBy: BE1P281CA0336.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:7d::15) To AM0PR08MB11804.eurprd08.prod.outlook.com (2603:10a6:20b:747::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AM0PR08MB11804:EE_|AS8PR08MB8802:EE_ X-MS-Office365-Filtering-Correlation-Id: 32dca967-e704-4697-cdb7-08df34dbd48f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|23010399003|366016|376014|52116014|10070799003|1800799024|18002099003|22082099003|56012099006|261026121527099003|261026140227099003|10067099003|261021121427099003|261021123027099003|261009223027099003|261022105027099003; X-Microsoft-Antispam-Message-Info: ePljdoeEpCKhWOIPiL0U9F+C6VhyLI3HoKsdwytBXi+3komHMasFm83yr+UqNKt2ZzYcS4eVDETEdX1Z4lhkEZ00Psr8XUnCQGzgvTdo+er3ai5QCuSgSZVhsPtWSw4a8CUotJJyjZpx2Ouugb/dZmgQA5FFpMKpKS/WsTlb7Yya3LM4qVDL3ytV3u4/f3U6LyXmfZVFKb6T5AyImYPrDWvR4I4wPYmyttf9PXB4ZWxUebIUoASkI6OEdrH15nnH9KtEE/49h1ysDmj565zbMhsQoBBrHkWDF6rIaKB6VfHQuBfH8Z4FmmqyAxK7tVt5MU3FkXIKCZEzUewZRNUbAxIEaPQ4HVNTxnY/3qBTCwaWOqGKx9+ukK/ZzrinnV43t728EDlQJ34kHK0M1kBQBjbZ3SX76rayH3O3e3t0Pr0XPAdgs7h7Mu7Q46b9KM8HVb3bXJDqvHmWWFOGtiGj5rYOM7qCofaeS9rPotzb7dygFynCbKrbFS6J7c5AxT8EvvZyozzSRHfnoUDeEsjAlAoY7DS7Nm0Qv8xvFlSBO2HSt/S62ng7X4o/GWEsgv5flakQOOWj4hUg+JYxF3eD85YPRqpRqPfvUYQSK5kCmCg= 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)(376014)(52116014)(10070799003)(1800799024)(18002099003)(22082099003)(56012099006)(261026121527099003)(261026140227099003)(10067099003)(261021121427099003)(261021123027099003)(261009223027099003)(261022105027099003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?enRVUmFiSC90ZE1UeGx3SmcwWTJKM3FWQzJ6RU9US0xKaDF5RXhjZHpWVTJa?= =?utf-8?B?M2g5UE9zN1BqQ3J1ZE16MXd6eGE4ZFBwb2YzM20wSVlJSWVya1QxUjFxNHZp?= =?utf-8?B?ZytrM1JMMzdOTnBpYzFtbUx0V0RocXV4cW5qWDJmd2QwRmI4Z294UlZ5TUR4?= =?utf-8?B?S2VMY3ZUZEtpUlppWVJBTEFhT1FiNFFUSzNLeG82VGVvKzIwVUpoQWpDZENB?= =?utf-8?B?TDd4YW5QY0t6L1hCY2VtT0NGZm5Kd0tRV2Y1U28zdzh6VmFQc1J2TGYzVEEy?= =?utf-8?B?MGVzVnNQTndoSTZleDR4UGlnUmpBaTJqenRkM2ErUmJCNkNvWkJvZkNlcmZO?= =?utf-8?B?dDRtM01JZ3hONnBpQ08zLzBEdjFvNGhkRTZvWlMyYlNQZkVxSWU1THNScnht?= =?utf-8?B?RXZBS0syaE1LTjJVVmMycTRhME45b1ZMQ0N5bCtETXFzeWtWODNPMnVzMVl4?= =?utf-8?B?cXdCVHlKb3JlVnVoNUFDQzRYN0l2bXUySUhJbnp4a0dVL2QyS2hmRFdlN2Js?= =?utf-8?B?WDBzNmZndE5FVVIyNVhkV3MzOWdubm5pNUUzSGh1VjduYkhJUG5RNXBLcGh5?= =?utf-8?B?aUpkdWNnd3FRT2JlaEtKWk04cEZ1N2E5c0prbDd0ZkpKeSt5N2ZRajRqSU1r?= =?utf-8?B?d2tzUy9BZ0tVRUR1bWd4eEpHQ0VZMUZWMGNSMDNuU2VYeVZ6cXZnVG8rQi9S?= =?utf-8?B?SEtBNUVmZHQ0WG1VcVBMY0JtZ295N0dLT1U1Tm9nTDJyTEdYTzc4U2dHMUhY?= =?utf-8?B?c2VKSVR2dFpIZEkxcGZyYURvdVUzcFRmNVFlcm9JMTdpMU4zTXdKUHpUZjZq?= =?utf-8?B?bXErYXI2bTQ3eXYyVUE5MkIwOWk1SzlIWkk4KzNyV3RGYUZsdk93azY1NkUv?= =?utf-8?B?OEJTOXhBdWswck40RitYb2MrbEZkakRlZURObm9kQXZuMHdXdlN6L0NLeGZn?= =?utf-8?B?d3NpU1NLTkt3Z3Avb2ZTT3FPdjlGZXNCUXdMNTY0VUZuMnZXZFIzdmdYSGFL?= =?utf-8?B?RXUxZ0NFSzcydUt6OERlYzZtdGViWSt4QXVEQklrUlhJemZWWnQ4RlhJTE53?= =?utf-8?B?YzBkOEtKK3Y1L0hZcXIyYmY1S0EzODUvelFjUE5NKzJ5ZG1SVUtnUHMvdk1M?= =?utf-8?B?WmFDK2JyMDRNdDZ2dkNOQ3l6elpvOXJ6VTRUTDYrV05XVkdMRytlTFZuVHVx?= =?utf-8?B?NmFxRUZDNU9zSlJZcUM1MzBOcTZyYitWc3k5QUxoa3l3RWltV2RsWmc2VHY3?= =?utf-8?B?cnpHampjc2VWUzFvZ3k1ZDJxcTdKM2lZRDR3SnFpbExGWHBiNis1WXNLZkhl?= =?utf-8?B?THoyeVJRWVRTa3puOE1HaGpTakJjNEcyck9McWFhQkZZaWdmY1FzSFl5M0k4?= =?utf-8?B?U2Uyd2p5Wjg1QnRjb2NUNGFrU2MrSDR0U2FhOSs3K3J4UFROdWhCSklSdm5l?= =?utf-8?B?dGNrZVlERzJhMUtxUVJ4ODFTa3hIM1FReEZLa0xnWEI1ZnF3ZVhQL3FtKzRm?= =?utf-8?B?YVJTdS9LVitBZzNRRkVhMmo4OTlsMGE4S1E2K2RYV1EyUFR0bTJjZlFMZ2dF?= =?utf-8?B?OTh1NDVSOVZNT1NpZTB3aDhsZEszVUhocUxXTnZTNWdZc0dOYVc2U21jY3dO?= =?utf-8?B?RU5qOXBab0pRdEU2ais2TTk0WUpDWFE3QkFtV09hbkh5aVVua3NnR2Ztb2I5?= =?utf-8?B?eGwzdVpoMFJIMitXZUxSL24rRkVvT3VsMHhwMW9NWEZUenEwR1hGNFB0NURt?= =?utf-8?B?N0grQTFJSjUxRk85SUdwTkdQV0NZbUovRml1U3R0WDIrZ0RPbmpoK0d1U3JH?= =?utf-8?B?dnBPaXZUVm5DcmRYRzVNeldlN0owUGw1emNTRHFEUFBQYVlqWU02S3pVMDhl?= =?utf-8?B?bzBoM3JYSXVCYTN4cGg1aDIwdkttZHovMnYrYWpUSloraENWb1BsaW04MTF2?= =?utf-8?B?dlJQSDF1Vm5SdDJtTm5iL2VhNjdiaHUyclh6OTFPZFprR2pNQWptcEphNjAw?= =?utf-8?B?ODdhcy94eHlhelVuaktGN3FWWjJ4V1dVKzJ0ZGtRcklvdVI3ZzZ6QXQrMEJG?= =?utf-8?B?ZHI4TVdWbkxtV0pHa1k0a01YWDdtMFVGbTA2WWp0UGVjcCtMK2p5STBXaENQ?= =?utf-8?B?RDhiQ21ZRnFTMEZPZWw0ZGx6TUhVNFA5Z2V3MExrZnJrRGFHYjFuUE5ZcURC?= =?utf-8?B?eFVLMjB5WUR6TGtMRHZ3czE2dXh5TlpIZnRGcTIvYUxlSU9tcWdiSVNJdVNW?= =?utf-8?B?bjdxVjFBMFR5c1JDSWo0RkVZcTVOeFVVVFNjdHEyYmpQUjVUd3VvUDgyeDJ4?= =?utf-8?B?RmNKdFlFTnlVQ2N6OGVqNVh0SVd2dGZTdXhyeSs5RXJBVU9sMU5vVVI5TXBS?= =?utf-8?Q?gUiIOA5abQgWzSwmHUWOgkmJzIidLopaUGUAK99fYBkXo?= X-MS-Exchange-AntiSpam-MessageData-1: Ys6MHMxYMVYA6jFmyUQB2O/mdwI3N7AooAk= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 32dca967-e704-4697-cdb7-08df34dbd48f X-MS-Exchange-CrossTenant-AuthSource: AM0PR08MB11804.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2026 10:11:27.9307 (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: 8wcboygTBbB4hAOSjm7FVttm8TYHwP89gvGZY6H9vJ+ky6bJ+2sB2bdQr6qNKNsIBzgNmznwnaQQkw0Om5pLsvXrO3FF/uH84QDaMQ8KlFo= X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB8802 X-OZ-Fwd: true Cc: devel@openvz.org Subject: [Devel] [PATCH hci-8.1 v7 6/8] 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. Take it after the early exits of blk_cbt_bio_queue(), which need no 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, 25 insertions(+), 25 deletions(-) diff --git a/block/blk-cbt.c b/block/blk-cbt.c index 10e03a29114a4..3ad4b9a25e1f4 100644 --- a/block/blk-cbt.c +++ b/block/blk-cbt.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -34,6 +35,8 @@ }) 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; @@ -105,8 +108,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; @@ -118,7 +120,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; @@ -132,15 +136,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; @@ -165,7 +165,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) { @@ -220,7 +220,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 */ @@ -243,7 +243,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); @@ -258,22 +258,22 @@ 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(); if (list_empty(&q->cbt_list) || bio_data_dir(bio) == READ || !bio->bi_iter.bi_size) - goto out_rcu; + return; - list_for_each_entry_rcu(cbt, &q->cbt_list, list) + idx = srcu_read_lock(&cbt_srcu); + 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(); + srcu_read_unlock(&cbt_srcu, idx); } static struct cbt_info *do_cbt_alloc(struct request_queue *q, __u8 *name, @@ -555,7 +555,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]; @@ -608,7 +608,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) @@ -696,7 +696,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) @@ -744,7 +744,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) { @@ -775,7 +775,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 */ @@ -897,7 +897,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; @@ -981,7 +981,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