From patchwork Mon Aug 5 05:03:55 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tariq Toukan X-Patchwork-Id: 13753125 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2049.outbound.protection.outlook.com [40.107.236.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 59164381BD for ; Mon, 5 Aug 2024 05:06:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722834366; cv=fail; b=RrIhJlq8dKp81pnSYc870qrVDjiRivSd60+Zg8FYVMZfhCd4UHKMfJBiBwXOANckcuRP09sSZscBH6xmjBKgvmeouRYbpnUnw3C1Y3xtIoTou5Pyl/fSh3XPwrtK4ctwEKFTtvonVgiuVyYu8l/TVbHMA3TyO3awwXmsmJwr2Tg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722834366; c=relaxed/simple; bh=QT/gBJ6flRRMTtwO+x05mkQmb/yX7eRDBD1oEyKM1nw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=UbBViN+WvSSaXwFiyPWdcnwp9ZDiNlzh5xBdH9x7rDNs9M3E7Tnw8r5N9ycFS7t00jW/kL18vqrhK8X0+Je84JiU6/HourX/C7t2qh+/w/70TzuOV63GKt/DwtyBaajgz+z9rrcujvPJPy6zHOHdYJ7ERXI+dQ30cZj0GkgQLAM= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=IWMS8UT9; arc=fail smtp.client-ip=40.107.236.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="IWMS8UT9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Xsc7JHeaG3Xu2A/X4UfxJ0s+UfBSA6Htl5TUj4qX6f14fVQb+U7OQTuVCvvCvo6/kSHh6/h4s3i07O7zSOaLcdPdHemix9OLcbw1ZODNUW1+FYfKPy+TMqx9NVH1uMRzj2H32DJnEDY0WnoqL4SnaSIDxYIa9aifw5TTxO8NCkmsRWpT0NAMjeNUJTHbxCQy75njg2BuwbOB3OXKH1UhgXcnCOqyBBLowUkfzXANrBEqZwIYBKwoM0IHVbcarFxu45RqxkOhaczXIzGx/CoSeZmegpuP9qg3hoN5WiOh4DTs98iA02hozBc9fXomAQPsRe7Vs/5cmbhF0x/uKqSFTA== 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=mfCKW+A4ChSNYTNy5jNn2eCieGmS4SWr1BaajKLWSeM=; b=dSgKb+4GcA7IRsqM/lHEOiPIFzWSjImrSIrt/5A52WRsSkhzh0pXuUQhziX0d8NopHORatoKxNs5yrEYtKNJ1IiRvV0J9YLUcpYOUlbVC0RdEOAG3fyWGccs+HRUEYfR8nW8rMyB0T7rW/4phjZ0jkTvPfESIXfq/OxOFaYKd0A08ZR0bW+bLULZxxEAHi/g9LTbezOFpNHlCd/IXtBdoLFpjHUYIYEJdnpYwJZABCmQayYt+sGMc7sgK2iNhpv+1TkmAlZ6YZFsWimzb9iEYaNVzlwq7jifNXplr5CH+OSIfE7FMzakud1H2pBp5LE9O1bD3CftV8yWROuzoHAWHw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=davemloft.net smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mfCKW+A4ChSNYTNy5jNn2eCieGmS4SWr1BaajKLWSeM=; b=IWMS8UT9XGdTBA/4GDSayEobdVhNM7YpXTKWV4I+/4Te1ZZQNSkSMzkV3Pxxt9JQKvMWgMOSOcMWUiSY6J+Hb1cikFr8GzvXJKrWhSvh8Ez3aaf4guiXx9CbDYLvl/l6FUBg81oOqNGKPkeXTzBBwWgYuMQh+getH11eYmWHfcslANb7xWn3v76JAk2anZ6yPhaza7Vsgtuj0y8QdBnMNdPH5BLxdFh4O9+Cq0/dw5HzQlBs8nqZuewip7H4BkTxOI0xmw2Rwo2qQS+0fEa4bg54B3I4C1kRk/ekEk/UT0ju69pcl8xorb+3uuCG3AXTDkN0SR4/yvg0R0LnMdspgQ== Received: from BN9P222CA0014.NAMP222.PROD.OUTLOOK.COM (2603:10b6:408:10c::19) by PH8PR12MB6964.namprd12.prod.outlook.com (2603:10b6:510:1bf::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.23; Mon, 5 Aug 2024 05:05:59 +0000 Received: from BN1PEPF0000468C.namprd05.prod.outlook.com (2603:10b6:408:10c:cafe::cf) by BN9P222CA0014.outlook.office365.com (2603:10b6:408:10c::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.26 via Frontend Transport; Mon, 5 Aug 2024 05:05:59 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BN1PEPF0000468C.mail.protection.outlook.com (10.167.243.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7849.8 via Frontend Transport; Mon, 5 Aug 2024 05:05:58 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Sun, 4 Aug 2024 22:05:42 -0700 Received: from rnnvmail203.nvidia.com (10.129.68.9) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Sun, 4 Aug 2024 22:05:42 -0700 Received: from vdi.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.9) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Sun, 4 Aug 2024 22:05:38 -0700 From: Tariq Toukan To: "David S. Miller" , Jakub Kicinski , Paolo Abeni , Eric Dumazet , "Jay Vosburgh" , Andy Gospodarek CC: , Saeed Mahameed , Gal Pressman , Leon Romanovsky , Hangbin Liu , Jianbo Liu , Tariq Toukan Subject: [PATCH net V3 1/3] bonding: implement xdo_dev_state_free and call it after deletion Date: Mon, 5 Aug 2024 08:03:55 +0300 Message-ID: <20240805050357.2004888-2-tariqt@nvidia.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240805050357.2004888-1-tariqt@nvidia.com> References: <20240805050357.2004888-1-tariqt@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN1PEPF0000468C:EE_|PH8PR12MB6964:EE_ X-MS-Office365-Filtering-Correlation-Id: e1321f7e-0d59-44a0-4f22-08dcb50c4b7f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|376014|82310400026; X-Microsoft-Antispam-Message-Info: 1LGn5ZEQBTXJHZkk53GuOIiJNW7zFswKujlSaqcsIjIrO3NeVu3BtJw56goKRk/etRZ4cb0NcVQ0MRfNcCz7G9amI5UoEca7zvMWV1onOV2NHcKUrQp2vivWWU+4oJY5QseNJzGxY4dJnSSpiosKIvpkBChi37fBP/Li/+lsDJLBlIo/jOU5PpeKcTCmwC/6ushsJoLbbBm2/eq4FUOnUYSvK7jBfBxYdR+nkmvTIPsMSjEeeJCuP/SofVvJ4vKxrtCGT7frqw8VKm7E5ZVv6EefSFEDGqZGvfp/ELYPWJt1FPG7sH6xFDVBVfZimEwlvnI3aMpicX7cbljEz2pgIr4Q1/bCEDMBLIaJqwsTw/suGewiv6tijp4n4rFl3/EKnsf9xrAolBj77XG+FGpd/UtWMCsGdSxdDk9pXD7Z94DLLKGiJwgQfEGtt7DxAdQm1299U+tM5APqwnipUTUMdsdsnVDO3S/yu9NRirgJGnF5jGLcUGhE5EmaFk5ag7a11ublqK22uuyNAwjRm2ymd/n3WojGZsWQK8rnfpCJnWjHl7/CIPvQf5R09tg52Vs2lPxLMpJs7HBOgOv3DV+Ek2hYHqKBf3uTvn4q2SYkZptw+SJcXRG0Wmc6wLS1f+CsvLW9TF5jvINx4rDb9EcALy1PHuZ/CFqUe1CyHyZ9ULr7yaRKMh7iafGI7eCaN3LpWHaSAc6soAebbxNgJinpGB5YpkcPX4IdWQOhoEmuL/NoE/8uH3/CdBndQPVLl/ODPvqU3ZN+DHv3m3o+OD+CIhaVlf9li44mVpQ6eECibOQzQUes2Rh7kKtVDVpUmRtAnCGXkSSYD1bA516kBqcbpS69eREdpGwaAQelE4dFYUxVixtQn3M1D3cGkeGVi8yiSh70AForyPLt0+R+Sh7+wy+7UUpXjD5uswB7vO3hbIYLhavCC7MD/j4laeKCbevHrHnPosb6+rLFeJFUX2N4PRPgjKNVNA/vWzMmiWashcrAI7n0Aw/b/O6+8QsTSTpjomtgqGh2KlR+RjMHZTyIVIlRlE3L5Al3cTrwoP5/p9PzagztbQEt7BLABhCqUPfyei2OW4GYkwtEv6g4fouDAUNTE7dGR/pPEyyI/HRRSIRcR0kSWDAmhpKD+5Z7PHLemKr5SJK8gn+7gWYMpjtNQK7IoD0PXQ9U7TlwH9WBbWiny5wf5qUiTWX/z4E/Bi3PFNMo1jS7Q3vB6KfpM/UkS/2nGrBITcFlvzfZVO7xDAkF4pHLVeR61F3WLD+c8zEGirvocD9c0RycSUNV4AOJMUvjiZeBS2/QNFH6jPhkey5dA/Sq86VPoNzG2V3PAnsiilrw9U02EJmUxxEHiNVjd8m15AoBV1ZbJuKmGEPnnpkkM0oWySAGEO23T0JFi8MDCBHXWBT2jrUncaya212Vr2JXyNiXXBVBT0sm2Z9sB4VQ14W31pp9ZR0qWMZ7h3lY X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(376014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2024 05:05:58.8606 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e1321f7e-0d59-44a0-4f22-08dcb50c4b7f X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN1PEPF0000468C.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH8PR12MB6964 X-Patchwork-Delegate: kuba@kernel.org From: Jianbo Liu Add this implementation for bonding, so hardware resources can be freed after xfrm state is deleted. And call it when deleting all SAs from old active real interface. Fixes: 9a5605505d9c ("bonding: Add struct bond_ipesc to manage SA") Signed-off-by: Jianbo Liu Signed-off-by: Tariq Toukan Reviewed-by: Hangbin Liu --- drivers/net/bonding/bond_main.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 1cd92c12e782..eb5e43860670 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -581,6 +581,8 @@ static void bond_ipsec_del_sa_all(struct bonding *bond) __func__); } else { slave->dev->xfrmdev_ops->xdo_dev_state_delete(ipsec->xs); + if (slave->dev->xfrmdev_ops->xdo_dev_state_free) + slave->dev->xfrmdev_ops->xdo_dev_state_free(ipsec->xs); } ipsec->xs->xso.real_dev = NULL; } @@ -588,6 +590,35 @@ static void bond_ipsec_del_sa_all(struct bonding *bond) rcu_read_unlock(); } +static void bond_ipsec_free_sa(struct xfrm_state *xs) +{ + struct net_device *bond_dev = xs->xso.dev; + struct net_device *real_dev; + struct bonding *bond; + struct slave *slave; + + if (!bond_dev) + return; + + rcu_read_lock(); + bond = netdev_priv(bond_dev); + slave = rcu_dereference(bond->curr_active_slave); + real_dev = slave ? slave->dev : NULL; + rcu_read_unlock(); + + if (!slave) + return; + + if (!xs->xso.real_dev) + return; + + WARN_ON(xs->xso.real_dev != real_dev); + + if (real_dev && real_dev->xfrmdev_ops && + real_dev->xfrmdev_ops->xdo_dev_state_free) + real_dev->xfrmdev_ops->xdo_dev_state_free(xs); +} + /** * bond_ipsec_offload_ok - can this packet use the xfrm hw offload * @skb: current data packet @@ -632,6 +663,7 @@ static bool bond_ipsec_offload_ok(struct sk_buff *skb, struct xfrm_state *xs) static const struct xfrmdev_ops bond_xfrmdev_ops = { .xdo_dev_state_add = bond_ipsec_add_sa, .xdo_dev_state_delete = bond_ipsec_del_sa, + .xdo_dev_state_free = bond_ipsec_free_sa, .xdo_dev_offload_ok = bond_ipsec_offload_ok, }; #endif /* CONFIG_XFRM_OFFLOAD */ From patchwork Mon Aug 5 05:03:56 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tariq Toukan X-Patchwork-Id: 13753126 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2047.outbound.protection.outlook.com [40.107.223.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 33445381BD for ; Mon, 5 Aug 2024 05:06:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.223.47 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722834372; cv=fail; b=RIcDVxNOgXGGqViaXH+BlQoOX99HFwkeyWB7cdz9rTwPWXOn1PBpl4va2s68VWyIoahVctSyHoDp1+dAm7xibHyp8KqyZOFthGjh+8Clbrh+9uK27bCTF9f87XCoslwcQ6QAdaWl+D/z7DvDDJINxiGPFHiVhmpPdb+WsNpLhB8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722834372; c=relaxed/simple; bh=6WczBtx4nheguhG2lnAA+hwRVowP8chB97sI8hy8rP4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=dDP2fDvbOrzpWHI5GO6+46/n5eNvhKORJZOjQ4mLQIXbdyQuTEWwXXqQ3IadGA7D3QRNaEfI6KXziHvPYA2cMFlos3X/8sUrNTVERLYGPyXYmoHhajfRX2c1byj/vHnm0+xzoiYh/g/SRPp7BWFyPvOp+aOPlznyY4Z8vG+u/KU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=ZibU6CLl; arc=fail smtp.client-ip=40.107.223.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="ZibU6CLl" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=KySJZJr/alJNRRhNMc6JeEiyRJIx5E3Mrfe6iIHUsaVD+kkjgiBBRww/6+6V7uuGfVKM0m6dQ+t07ETv1ap7jzYaVBGYZd2hqxUImoq26GXoQCxVf2UURayA+T+2WA4uMcjEtmvKBsDSwa7qcR4kraBrpouxBqX8BgpSjukfERW/9vt+XTAlRzFWn2kEj/yQ8fn5BxGNrmlqYgwPhzImBCT5p9wqTAw79fPz4soz7JJM7PU3jXiuOY9jT9D/dlX6Hz3k3EEchuvfvBNvKo85AGkR7ouL7ItnLrCIVdnjW01yiyBi7yMnEooGzEmwIhzuvodpKTfrKFPsRj6DlZMb0g== 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=wrqqaKNAfZ9Yvk/b40dTa9e48d4cE30MIHGA3WyNk/A=; b=oxFoVNPjFjQCVn+CVZy1kUnDYag67q6tl7K0uxqisX0+C9EQG7a2a/9jqGvfbmpfAlCE0yy9FjotWFBRxF4wAWGHlmAIiKBa8VTqZiUtlpezQAEN/sfXUz3RaZ6Nt2IfNezO18vfeoxskjgUnuar4hE5j6yEZnEhsakcVFFrkJr+gMPnQZazF2O9qKYIbMhylBbS3Y17LLtakId6KR3MZM2KlnlfEqNhEupqR18XK4H2iaCegFhk1OpvS4PcrIfBlnrUlAkf95MWDabjx/yvwTaMAzFZEed6Rl2Aq/3wp1qI1Gm3bCdPW2K+BgYprfpe8qcY1+ZPNG95wNHC7chepQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=davemloft.net smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wrqqaKNAfZ9Yvk/b40dTa9e48d4cE30MIHGA3WyNk/A=; b=ZibU6CLlmgu4oUJ+r2/oEisQE3LZf+l1U+jR6yBqDYbrf15ZAmmKqWHvRhCweFjS99cJbbkY4M7H7R3SV3YgQfP7oGaPksinPlzpZr3wM4Yj/uXl6khFnmeF9bi5HVBu+USVk3adyJWrm0ApZ8gujWKxGKaAnWfK8BKHxZL6c+iOt2yog6YHo/8QyuE+WNdX1p/we4VnwUahVrEqzh6CDVzPoUAcvgbomY7g2QEBfx00qfE5cNODSOpb1KliAivJBLHHWNSfaxQy+8jPWB7br8nX0fwL0DnxIdbcbeS46FLz6bY2La0FPyHNym54bSrHHUIJPk/E36vH/6R0LdgZLg== Received: from BN9PR03CA0447.namprd03.prod.outlook.com (2603:10b6:408:113::32) by LV2PR12MB6015.namprd12.prod.outlook.com (2603:10b6:408:14f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.26; Mon, 5 Aug 2024 05:06:06 +0000 Received: from BN1PEPF0000468D.namprd05.prod.outlook.com (2603:10b6:408:113:cafe::e) by BN9PR03CA0447.outlook.office365.com (2603:10b6:408:113::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.26 via Frontend Transport; Mon, 5 Aug 2024 05:06:06 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BN1PEPF0000468D.mail.protection.outlook.com (10.167.243.138) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7849.8 via Frontend Transport; Mon, 5 Aug 2024 05:06:05 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Sun, 4 Aug 2024 22:05:47 -0700 Received: from rnnvmail203.nvidia.com (10.129.68.9) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Sun, 4 Aug 2024 22:05:46 -0700 Received: from vdi.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.9) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Sun, 4 Aug 2024 22:05:42 -0700 From: Tariq Toukan To: "David S. Miller" , Jakub Kicinski , Paolo Abeni , Eric Dumazet , "Jay Vosburgh" , Andy Gospodarek CC: , Saeed Mahameed , Gal Pressman , Leon Romanovsky , Hangbin Liu , Jianbo Liu , Cosmin Ratiu , Tariq Toukan Subject: [PATCH net V3 2/3] bonding: extract the use of real_device into local variable Date: Mon, 5 Aug 2024 08:03:56 +0300 Message-ID: <20240805050357.2004888-3-tariqt@nvidia.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240805050357.2004888-1-tariqt@nvidia.com> References: <20240805050357.2004888-1-tariqt@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN1PEPF0000468D:EE_|LV2PR12MB6015:EE_ X-MS-Office365-Filtering-Correlation-Id: 7439ea4a-f01e-416e-235f-08dcb50c4f63 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|36860700013|82310400026|376014; X-Microsoft-Antispam-Message-Info: e/mEZnYh/EG9ZuEPtk+qw1ZaDLcJ8orvpukX3DCAfpuG3gqleEOfQM78SnPiVgv8NbjXGcqD8v+luG7wrT0VNVnAGeR0k8rtBmIVJV8OCd/+mt0ucMPmnitwjVBwNPUepOxsTEsF4kW5Kergt9JvzqpX95JOyoEqbqrQ4E/vUq+U5ixMScQLrM+91U95hMM5v1dCgFtAY0iOE4Qbg/kpek8zHMVIaA3VsWNlL5UuXrqe2LOXncLyrhs2ppnZG5vQdoxlCZPD2Lin6OQoj07ywWdnNPVkIRQ5KtlAAFmxzINyLItPwOkbThICHPnNLc/3zePCCNydcJzPF2pnj/naAB9fvGcui2P+xFlLSNPin/37xw6GRaMeNOAMmsx1sT3gph10PDXkgoxUPZWc0QGgYAa11LHoYlgnNcqIMQZiNQqI+zKFiXLSnxt7flBso/9kwIfIjfg6FBeQkwc8dWNSan5Bv6kQPdwlqoE3jQh4QeQMcBJPBHyr3urqEQyCV+pXAuLRgHAUYHwJRiRyG7CGQcqdv3sOxIRQhsV5berBsr4OL6ZssNeHI+1269hLXpYfY/dHIdHdE2mmkj/0c78Zaq6Y8yfCePJN1fKCUnhnn7D6NDrOgLA22aHhfvaahTVWhQdxP8OjD5YYyGXwGaauCc6oJ4gafuNiGrBVUpXWsqTfxvNJ+cVSCHb3yqbdQ1jrL2syvMuFn/yZS5d9tAusvYclEBFf2ER88ldv+TuwLV654Uh52yJSIe4jv+nWc09xEQWk4wIlnDy5g3hFJ0qC3C1VAqUy237hRVqmZz+spSHKcAhub3lCjgBuarbcyaMrJgatP5+8H2XA/PIQBSKdSUN9awE7g9Z0epLpm/3z7Pc3CbLnfzFepWGhBv3FBBPAjtyL2Acx34rEP0t0nH7wAngPNWUdnOrCNclw5UOQBl9nP6Ulddbo9sWNYPv6ZBZKm/r7xdsg7fHbfZDLcQo2mYffortpwOH3eSCiMO7dVBeeYEY0c0jsHAlVjbCNZDCvfv0/agtWl+r27tTThfZ7Q6NCXfajzKtBqIFieNAqWj3obfFiMePLu38YSkbvvbOya1jHHw6isAzdTTD2SY510SZcKDjxSToLkmPcruf3x/6/3ImfogIsr8eOLaCIBkSZMV8PSPTClf19NElgAIsKtKO/ZjiShbGRfEwoUqX5YDlve8S3McyamvgxvLkktmu6syVrQEWP9Qm/47qER6LDBgNy/sxpdzA6VVuNbVwykSTejSBp+3jaJunXZHaWLDVr8xK+YeAiPyeyNRzebNKbGncMWKG3N3y2rCqhESRc/aSLj9HjN12oqwocBkxvVW5jMe0JhLMcCWDLPq2CiP5BblbgNcEOlnryRqRRO6tsR6c5MkOikdU6inCul3Qogf43t8dmsy5o3KXXi06OgncT9O1JhTwa5O66084kLWVsUK3Qifsd/IAghA7x94F1AL8P X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230040)(1800799024)(36860700013)(82310400026)(376014);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2024 05:06:05.3868 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 7439ea4a-f01e-416e-235f-08dcb50c4f63 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN1PEPF0000468D.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV2PR12MB6015 X-Patchwork-Delegate: kuba@kernel.org From: Jianbo Liu Add a local variable for slave->dev, to prepare for the lock change in the next patch. There is no functionality change. Fixes: 9a5605505d9c ("bonding: Add struct bond_ipesc to manage SA") Signed-off-by: Jianbo Liu Reviewed-by: Cosmin Ratiu Signed-off-by: Tariq Toukan Reviewed-by: Hangbin Liu --- drivers/net/bonding/bond_main.c | 58 +++++++++++++++++++-------------- 1 file changed, 33 insertions(+), 25 deletions(-) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index eb5e43860670..e550b1c08fdb 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -427,6 +427,7 @@ static int bond_ipsec_add_sa(struct xfrm_state *xs, struct netlink_ext_ack *extack) { struct net_device *bond_dev = xs->xso.dev; + struct net_device *real_dev; struct bond_ipsec *ipsec; struct bonding *bond; struct slave *slave; @@ -443,9 +444,10 @@ static int bond_ipsec_add_sa(struct xfrm_state *xs, return -ENODEV; } - if (!slave->dev->xfrmdev_ops || - !slave->dev->xfrmdev_ops->xdo_dev_state_add || - netif_is_bond_master(slave->dev)) { + real_dev = slave->dev; + if (!real_dev->xfrmdev_ops || + !real_dev->xfrmdev_ops->xdo_dev_state_add || + netif_is_bond_master(real_dev)) { NL_SET_ERR_MSG_MOD(extack, "Slave does not support ipsec offload"); rcu_read_unlock(); return -EINVAL; @@ -456,9 +458,9 @@ static int bond_ipsec_add_sa(struct xfrm_state *xs, rcu_read_unlock(); return -ENOMEM; } - xs->xso.real_dev = slave->dev; - err = slave->dev->xfrmdev_ops->xdo_dev_state_add(xs, extack); + xs->xso.real_dev = real_dev; + err = real_dev->xfrmdev_ops->xdo_dev_state_add(xs, extack); if (!err) { ipsec->xs = xs; INIT_LIST_HEAD(&ipsec->list); @@ -475,6 +477,7 @@ static int bond_ipsec_add_sa(struct xfrm_state *xs, static void bond_ipsec_add_sa_all(struct bonding *bond) { struct net_device *bond_dev = bond->dev; + struct net_device *real_dev; struct bond_ipsec *ipsec; struct slave *slave; @@ -483,12 +486,13 @@ static void bond_ipsec_add_sa_all(struct bonding *bond) if (!slave) goto out; - if (!slave->dev->xfrmdev_ops || - !slave->dev->xfrmdev_ops->xdo_dev_state_add || - netif_is_bond_master(slave->dev)) { + real_dev = slave->dev; + if (!real_dev->xfrmdev_ops || + !real_dev->xfrmdev_ops->xdo_dev_state_add || + netif_is_bond_master(real_dev)) { spin_lock_bh(&bond->ipsec_lock); if (!list_empty(&bond->ipsec_list)) - slave_warn(bond_dev, slave->dev, + slave_warn(bond_dev, real_dev, "%s: no slave xdo_dev_state_add\n", __func__); spin_unlock_bh(&bond->ipsec_lock); @@ -497,9 +501,9 @@ static void bond_ipsec_add_sa_all(struct bonding *bond) spin_lock_bh(&bond->ipsec_lock); list_for_each_entry(ipsec, &bond->ipsec_list, list) { - ipsec->xs->xso.real_dev = slave->dev; - if (slave->dev->xfrmdev_ops->xdo_dev_state_add(ipsec->xs, NULL)) { - slave_warn(bond_dev, slave->dev, "%s: failed to add SA\n", __func__); + ipsec->xs->xso.real_dev = real_dev; + if (real_dev->xfrmdev_ops->xdo_dev_state_add(ipsec->xs, NULL)) { + slave_warn(bond_dev, real_dev, "%s: failed to add SA\n", __func__); ipsec->xs->xso.real_dev = NULL; } } @@ -515,6 +519,7 @@ static void bond_ipsec_add_sa_all(struct bonding *bond) static void bond_ipsec_del_sa(struct xfrm_state *xs) { struct net_device *bond_dev = xs->xso.dev; + struct net_device *real_dev; struct bond_ipsec *ipsec; struct bonding *bond; struct slave *slave; @@ -532,16 +537,17 @@ static void bond_ipsec_del_sa(struct xfrm_state *xs) if (!xs->xso.real_dev) goto out; - WARN_ON(xs->xso.real_dev != slave->dev); + real_dev = slave->dev; + WARN_ON(xs->xso.real_dev != real_dev); - if (!slave->dev->xfrmdev_ops || - !slave->dev->xfrmdev_ops->xdo_dev_state_delete || - netif_is_bond_master(slave->dev)) { - slave_warn(bond_dev, slave->dev, "%s: no slave xdo_dev_state_delete\n", __func__); + if (!real_dev->xfrmdev_ops || + !real_dev->xfrmdev_ops->xdo_dev_state_delete || + netif_is_bond_master(real_dev)) { + slave_warn(bond_dev, real_dev, "%s: no slave xdo_dev_state_delete\n", __func__); goto out; } - slave->dev->xfrmdev_ops->xdo_dev_state_delete(xs); + real_dev->xfrmdev_ops->xdo_dev_state_delete(xs); out: spin_lock_bh(&bond->ipsec_lock); list_for_each_entry(ipsec, &bond->ipsec_list, list) { @@ -558,6 +564,7 @@ static void bond_ipsec_del_sa(struct xfrm_state *xs) static void bond_ipsec_del_sa_all(struct bonding *bond) { struct net_device *bond_dev = bond->dev; + struct net_device *real_dev; struct bond_ipsec *ipsec; struct slave *slave; @@ -568,21 +575,22 @@ static void bond_ipsec_del_sa_all(struct bonding *bond) return; } + real_dev = slave->dev; spin_lock_bh(&bond->ipsec_lock); list_for_each_entry(ipsec, &bond->ipsec_list, list) { if (!ipsec->xs->xso.real_dev) continue; - if (!slave->dev->xfrmdev_ops || - !slave->dev->xfrmdev_ops->xdo_dev_state_delete || - netif_is_bond_master(slave->dev)) { - slave_warn(bond_dev, slave->dev, + if (!real_dev->xfrmdev_ops || + !real_dev->xfrmdev_ops->xdo_dev_state_delete || + netif_is_bond_master(real_dev)) { + slave_warn(bond_dev, real_dev, "%s: no slave xdo_dev_state_delete\n", __func__); } else { - slave->dev->xfrmdev_ops->xdo_dev_state_delete(ipsec->xs); - if (slave->dev->xfrmdev_ops->xdo_dev_state_free) - slave->dev->xfrmdev_ops->xdo_dev_state_free(ipsec->xs); + real_dev->xfrmdev_ops->xdo_dev_state_delete(ipsec->xs); + if (real_dev->xfrmdev_ops->xdo_dev_state_free) + real_dev->xfrmdev_ops->xdo_dev_state_free(ipsec->xs); } ipsec->xs->xso.real_dev = NULL; } From patchwork Mon Aug 5 05:03:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tariq Toukan X-Patchwork-Id: 13753127 X-Patchwork-Delegate: kuba@kernel.org Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2074.outbound.protection.outlook.com [40.107.236.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6835381BD for ; Mon, 5 Aug 2024 05:06:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.74 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722834376; cv=fail; b=hjfwXg3+j+lLgi1WE37RQTeGw3p/hhBHIl2IcHxJZAB2M9z5NKEJNwnZB7vF7C3VdQbhugA3MGWuhv5i+WMNOI0KC7o0xJLAnaEkNBfFE6TLqI0UJjy2HvOf7UAA/8g3SMM+W2z9o+7ZrjAnoygt+xnS6VpNKwY/BzW9qSUcg6Q= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1722834376; c=relaxed/simple; bh=RIC/x4WguaKBTtWlqV7BH2hovdQr8Jk728Q3WRRRtUc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=i00iaiCkFj3a5Iwi1g/DmgFZBgeJiBIiPhDieLw5XrA8oODBRMKZuzxLjC7ISj4WUCVZVDpZYMClHzaGSI/bjew3EgQIfkFbSAvfExQ+Qzb/+D51RNGL5NEkZCjdNOrPYWK25ySsd2xVBKix2ceQ9IRj2RKJG2GV+r9q2OsEFrY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=jwphncXr; arc=fail smtp.client-ip=40.107.236.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="jwphncXr" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uXIdf+9JfkYl95HVW/Oh8p9nJnKctAzhnsHPXF6ttPmjwSMO3fnx8JvixLYEwApjG5clq4k6IALVJA38LMLAZuL3GlL5Y+Fr1cRf+HN46Qrgvps4SeAkPDtKuduScUCEUPCFGB8iA8nRok4gBQZqi7GmqDeCOjC6b37syz3zSPC5JP5sTVa5LjBuY2QCPuODlVpajGbecNgmpK6itHyiw4proRNGL2tGQt0BkGPQRNOClon0PxPOwKd1P9Alsp/M1tvUEYqDfiSDQzXp/Kdx7i8pEbMEmkS+C2caWyRnWSkHOxqdqdH2bY1iN74oJHPK/LkbyrZ3Y3X2JTWZKtXOyg== 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=uooANgY7pVMLUkZbDZlnaUlzSqKqENpZ5FTyjGJaHGw=; b=FWmQReAiH7B7ckGDN2Jp7qbW3h/t1lTP2i/pMdeDvEikNBY0uAMV0ZBkCGV1iPbCLuyoC6hfwUbuOTzUC1izPzDE9UlPpzWa7o0dwZ0qV2IqzRIEc1LiMTZWL9hItz1kua6o+KiujQn6idc4D+QiaMfv4t2HrMID8CgQ1a+5Q+TCIpkdbH58IUiYyBvuw+7K3RJfl7S+v31QfxXooOZ9jB7mzUSFe62lxrkhCM9QJT4PJtmi0RiF7d2I8kSVQdwDWDsy6SNCf05txC7EL65CDK8kCMHG8kRMNWPDeKwh2cfkCR2133yVTjYAdiOZs7RR1C9HV4SwZFB+HMj49tG/nA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=davemloft.net smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uooANgY7pVMLUkZbDZlnaUlzSqKqENpZ5FTyjGJaHGw=; b=jwphncXrYGuI5iJYh4DiVT3DX4U3hELvIxgazZWj5tD+coOVIw7qPKl+WD9Bwu0Me+e+iLP/DyLDvSdlQJvl0f+XFlIdmwSk3GzJ6MWnYaE07qfzvvw2ygNppSU3tSDdIKnedY+7O8XtMV75lYLMroold4XPNMKO841iPfBhwdOtSRJrwzt5DnIQYhD68z2TNv5Ns+wklCB46kG423CXIQAWGYgoI70hh5eNT6rqsYw0opPcYk9JNAayzHMBqFXUPvaafBbuLCQbrvov8BSixqlr02au89S0tYKQAW6FPTX3O588CXP9tFfSvSxF0SWT2bV/4625HznlfPHPUDQIdg== Received: from PH3PEPF0000409F.namprd05.prod.outlook.com (2603:10b6:518:1::4f) by MW4PR12MB7359.namprd12.prod.outlook.com (2603:10b6:303:222::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.20; Mon, 5 Aug 2024 05:06:10 +0000 Received: from SN1PEPF000397AF.namprd05.prod.outlook.com (2a01:111:f403:f90d::1) by PH3PEPF0000409F.outlook.office365.com (2603:1036:903:49::3) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7762.21 via Frontend Transport; Mon, 5 Aug 2024 05:06:10 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by SN1PEPF000397AF.mail.protection.outlook.com (10.167.248.53) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7828.19 via Frontend Transport; Mon, 5 Aug 2024 05:06:10 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Sun, 4 Aug 2024 22:05:51 -0700 Received: from rnnvmail203.nvidia.com (10.129.68.9) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Sun, 4 Aug 2024 22:05:50 -0700 Received: from vdi.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.9) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Sun, 4 Aug 2024 22:05:47 -0700 From: Tariq Toukan To: "David S. Miller" , Jakub Kicinski , Paolo Abeni , Eric Dumazet , "Jay Vosburgh" , Andy Gospodarek CC: , Saeed Mahameed , Gal Pressman , Leon Romanovsky , Hangbin Liu , Jianbo Liu , Tariq Toukan Subject: [PATCH net V3 3/3] bonding: change ipsec_lock from spin lock to mutex Date: Mon, 5 Aug 2024 08:03:57 +0300 Message-ID: <20240805050357.2004888-4-tariqt@nvidia.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20240805050357.2004888-1-tariqt@nvidia.com> References: <20240805050357.2004888-1-tariqt@nvidia.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SN1PEPF000397AF:EE_|MW4PR12MB7359:EE_ X-MS-Office365-Filtering-Correlation-Id: cf1a5373-726b-411f-2642-08dcb50c5248 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|36860700013|1800799024|376014|82310400026; X-Microsoft-Antispam-Message-Info: l9Y8VN644kKUw4VgKM9x0o+4K4yiNm8z1Jx6bQ/6n661PwtLW9qW1vG6y/y8EeMORFTXbIwhshyCbvVEh3BOA+Fz8SvVdtSxWikhWrIIoLQxUXRih3iuDSxCeyfFFQKyEbA2gEr8n9aX0usepFEZo8heDq55jOTRrcnnnMHSK8xb0oQvwvqd3aWH12JzqcW2l89cDAa9XyqgOzRJXBnQyQhOjXks8kA5AETeLRqIpKmA+rya3/0BJ9QslvtK+XJp1NUa8QQc6WQvmjMMfTp6owt+sXw8MQ8L81Xkxhq8nWACcOlytjBA3IPKIHz6wspSiYH5m5bAcU1M0w/3ozHh/1DnHLfQUrXbzmNXcNjzf+ek6xNALRY1S3j4fmSX42bBqIJcHhnpm0/Xh7GSmtbZpcVGbJuBO1xTKZEgcI8Zb7YtXhI+2I9WoFM4RG2Q3bw9qsiD5m51P06/WKgX27oojKpj/ObKH4+MBH25DTd75r+i81dJFujcPpalWvlSkhwCVEN4UbbFGLJK7rPbUalq7WHxSxd2rUueKXwXie3F57+FsXjiu8ZuGewB192QLtx24NSSGBlaU3baVyBRwzKk0w/42IWa2w1ENjUk97kC+qQkGXSP6slxvxrZ/g+jtZeA0LsssM0bqCNJIDU5AUHmNFY8z2WMi41dX1l/yaFRS4DOvvb24dE9xxgxMnIMCKR9UK6RBor80LobWv3zBiUV1RxN14w5RbGpIirbNSRRZv0jR7U8J7srgDz2Iw+2SjI9zoxLMIEFPkmm0B63oTon2DnE9I9em69VA0MCMI2HO8iM9nh5hEcq4D3bCeyg5QgxtkPPiscW+Jds5q7+N0rfx2JCtP0Q8T0OXcAYs32EWn7fIYiIarEZ9IROlusl8YoWz8jAlxlfXDITYDt0Eymb4Y2p1ypMiVmnJghR149+5UW+UHm+zaVp813m4LFStsQgYQ8Z6OTcS5hWcG8ou2MMRROzDXS49qDnGNbWikOo8OHlgKGEz6L1xmgghMrUBjcDMhnuT9prC1t12q6ROXqVIzW5g6Vy0lGX758fjvRK98TtxZkXSjrPjaP0fcQke5PL9ZN/9CD5qZifFxlE/JMeq6KHr1BZ0DHSv0WMlAYnA3+HvqWp+WIc/tETrL/7q82bDdrRy1QQd/PHZjXeAvHgr4SqrLJgAGzFxss+3b+B+dTecQt/Odw3Ep1a+XkG9lEBcuXbF6RvERcssGC6iehkbGvpZafWlbN83V81TZDm4kUkU+yqi9XgUgKBba2CI3PzAwgOIlR6K0Pz6SyP3k5bpv0P2ik2CmUZopEc1vZd1yJvrUQRgkkMjrtiv7HWDyCJpQGv1c5SNeyzk9fKfQ018KHZ63GlTPbRqIONoPnRu6U2PE60ffzFCpdbNbT4G1CKn3UX+64oz3P7alub2gCpDcdN+2FVVJkbxicVPn4MgNOTLzRBhTwvOnQ5xHoAi5Qt X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(36860700013)(1800799024)(376014)(82310400026);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2024 05:06:10.3056 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: cf1a5373-726b-411f-2642-08dcb50c5248 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SN1PEPF000397AF.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB7359 X-Patchwork-Delegate: kuba@kernel.org From: Jianbo Liu In the cited commit, bond->ipsec_lock is added to protect ipsec_list, hence xdo_dev_state_add and xdo_dev_state_delete are called inside this lock. As ipsec_lock is a spin lock and such xfrmdev ops may sleep, "scheduling while atomic" will be triggered when changing bond's active slave. [ 101.055189] BUG: scheduling while atomic: bash/902/0x00000200 [ 101.055726] Modules linked in: [ 101.058211] CPU: 3 PID: 902 Comm: bash Not tainted 6.9.0-rc4+ #1 [ 101.058760] Hardware name: [ 101.059434] Call Trace: [ 101.059436] [ 101.060873] dump_stack_lvl+0x51/0x60 [ 101.061275] __schedule_bug+0x4e/0x60 [ 101.061682] __schedule+0x612/0x7c0 [ 101.062078] ? __mod_timer+0x25c/0x370 [ 101.062486] schedule+0x25/0xd0 [ 101.062845] schedule_timeout+0x77/0xf0 [ 101.063265] ? asm_common_interrupt+0x22/0x40 [ 101.063724] ? __bpf_trace_itimer_state+0x10/0x10 [ 101.064215] __wait_for_common+0x87/0x190 [ 101.064648] ? usleep_range_state+0x90/0x90 [ 101.065091] cmd_exec+0x437/0xb20 [mlx5_core] [ 101.065569] mlx5_cmd_do+0x1e/0x40 [mlx5_core] [ 101.066051] mlx5_cmd_exec+0x18/0x30 [mlx5_core] [ 101.066552] mlx5_crypto_create_dek_key+0xea/0x120 [mlx5_core] [ 101.067163] ? bonding_sysfs_store_option+0x4d/0x80 [bonding] [ 101.067738] ? kmalloc_trace+0x4d/0x350 [ 101.068156] mlx5_ipsec_create_sa_ctx+0x33/0x100 [mlx5_core] [ 101.068747] mlx5e_xfrm_add_state+0x47b/0xaa0 [mlx5_core] [ 101.069312] bond_change_active_slave+0x392/0x900 [bonding] [ 101.069868] bond_option_active_slave_set+0x1c2/0x240 [bonding] [ 101.070454] __bond_opt_set+0xa6/0x430 [bonding] [ 101.070935] __bond_opt_set_notify+0x2f/0x90 [bonding] [ 101.071453] bond_opt_tryset_rtnl+0x72/0xb0 [bonding] [ 101.071965] bonding_sysfs_store_option+0x4d/0x80 [bonding] [ 101.072567] kernfs_fop_write_iter+0x10c/0x1a0 [ 101.073033] vfs_write+0x2d8/0x400 [ 101.073416] ? alloc_fd+0x48/0x180 [ 101.073798] ksys_write+0x5f/0xe0 [ 101.074175] do_syscall_64+0x52/0x110 [ 101.074576] entry_SYSCALL_64_after_hwframe+0x4b/0x53 As bond_ipsec_add_sa_all and bond_ipsec_del_sa_all are only called from bond_change_active_slave, which requires holding the RTNL lock. And bond_ipsec_add_sa and bond_ipsec_del_sa are xfrm state xdo_dev_state_add and xdo_dev_state_delete APIs, which are in user context. So ipsec_lock doesn't have to be spin lock, change it to mutex, and thus the above issue can be resolved. Fixes: 9a5605505d9c ("bonding: Add struct bond_ipesc to manage SA") Signed-off-by: Jianbo Liu Signed-off-by: Tariq Toukan Reviewed-by: Hangbin Liu --- drivers/net/bonding/bond_main.c | 75 +++++++++++++++++---------------- include/net/bonding.h | 2 +- 2 files changed, 40 insertions(+), 37 deletions(-) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index e550b1c08fdb..56764f1c39b8 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -439,38 +439,33 @@ static int bond_ipsec_add_sa(struct xfrm_state *xs, rcu_read_lock(); bond = netdev_priv(bond_dev); slave = rcu_dereference(bond->curr_active_slave); - if (!slave) { - rcu_read_unlock(); + real_dev = slave ? slave->dev : NULL; + rcu_read_unlock(); + if (!real_dev) return -ENODEV; - } - real_dev = slave->dev; if (!real_dev->xfrmdev_ops || !real_dev->xfrmdev_ops->xdo_dev_state_add || netif_is_bond_master(real_dev)) { NL_SET_ERR_MSG_MOD(extack, "Slave does not support ipsec offload"); - rcu_read_unlock(); return -EINVAL; } - ipsec = kmalloc(sizeof(*ipsec), GFP_ATOMIC); - if (!ipsec) { - rcu_read_unlock(); + ipsec = kmalloc(sizeof(*ipsec), GFP_KERNEL); + if (!ipsec) return -ENOMEM; - } xs->xso.real_dev = real_dev; err = real_dev->xfrmdev_ops->xdo_dev_state_add(xs, extack); if (!err) { ipsec->xs = xs; INIT_LIST_HEAD(&ipsec->list); - spin_lock_bh(&bond->ipsec_lock); + mutex_lock(&bond->ipsec_lock); list_add(&ipsec->list, &bond->ipsec_list); - spin_unlock_bh(&bond->ipsec_lock); + mutex_unlock(&bond->ipsec_lock); } else { kfree(ipsec); } - rcu_read_unlock(); return err; } @@ -481,35 +476,43 @@ static void bond_ipsec_add_sa_all(struct bonding *bond) struct bond_ipsec *ipsec; struct slave *slave; - rcu_read_lock(); - slave = rcu_dereference(bond->curr_active_slave); - if (!slave) - goto out; + slave = rtnl_dereference(bond->curr_active_slave); + real_dev = slave ? slave->dev : NULL; + if (!real_dev) + return; - real_dev = slave->dev; + mutex_lock(&bond->ipsec_lock); if (!real_dev->xfrmdev_ops || !real_dev->xfrmdev_ops->xdo_dev_state_add || netif_is_bond_master(real_dev)) { - spin_lock_bh(&bond->ipsec_lock); if (!list_empty(&bond->ipsec_list)) slave_warn(bond_dev, real_dev, "%s: no slave xdo_dev_state_add\n", __func__); - spin_unlock_bh(&bond->ipsec_lock); goto out; } - spin_lock_bh(&bond->ipsec_lock); list_for_each_entry(ipsec, &bond->ipsec_list, list) { + struct net_device *dev = ipsec->xs->xso.real_dev; + + /* If new state is added before ipsec_lock acquired */ + if (dev) { + if (dev == real_dev) + continue; + + dev->xfrmdev_ops->xdo_dev_state_delete(ipsec->xs); + if (dev->xfrmdev_ops->xdo_dev_state_free) + dev->xfrmdev_ops->xdo_dev_state_free(ipsec->xs); + } + ipsec->xs->xso.real_dev = real_dev; if (real_dev->xfrmdev_ops->xdo_dev_state_add(ipsec->xs, NULL)) { slave_warn(bond_dev, real_dev, "%s: failed to add SA\n", __func__); ipsec->xs->xso.real_dev = NULL; } } - spin_unlock_bh(&bond->ipsec_lock); out: - rcu_read_unlock(); + mutex_unlock(&bond->ipsec_lock); } /** @@ -530,6 +533,8 @@ static void bond_ipsec_del_sa(struct xfrm_state *xs) rcu_read_lock(); bond = netdev_priv(bond_dev); slave = rcu_dereference(bond->curr_active_slave); + real_dev = slave ? slave->dev : NULL; + rcu_read_unlock(); if (!slave) goto out; @@ -537,7 +542,6 @@ static void bond_ipsec_del_sa(struct xfrm_state *xs) if (!xs->xso.real_dev) goto out; - real_dev = slave->dev; WARN_ON(xs->xso.real_dev != real_dev); if (!real_dev->xfrmdev_ops || @@ -549,7 +553,7 @@ static void bond_ipsec_del_sa(struct xfrm_state *xs) real_dev->xfrmdev_ops->xdo_dev_state_delete(xs); out: - spin_lock_bh(&bond->ipsec_lock); + mutex_lock(&bond->ipsec_lock); list_for_each_entry(ipsec, &bond->ipsec_list, list) { if (ipsec->xs == xs) { list_del(&ipsec->list); @@ -557,8 +561,7 @@ static void bond_ipsec_del_sa(struct xfrm_state *xs) break; } } - spin_unlock_bh(&bond->ipsec_lock); - rcu_read_unlock(); + mutex_unlock(&bond->ipsec_lock); } static void bond_ipsec_del_sa_all(struct bonding *bond) @@ -568,15 +571,12 @@ static void bond_ipsec_del_sa_all(struct bonding *bond) struct bond_ipsec *ipsec; struct slave *slave; - rcu_read_lock(); - slave = rcu_dereference(bond->curr_active_slave); - if (!slave) { - rcu_read_unlock(); + slave = rtnl_dereference(bond->curr_active_slave); + real_dev = slave ? slave->dev : NULL; + if (!real_dev) return; - } - real_dev = slave->dev; - spin_lock_bh(&bond->ipsec_lock); + mutex_lock(&bond->ipsec_lock); list_for_each_entry(ipsec, &bond->ipsec_list, list) { if (!ipsec->xs->xso.real_dev) continue; @@ -594,8 +594,7 @@ static void bond_ipsec_del_sa_all(struct bonding *bond) } ipsec->xs->xso.real_dev = NULL; } - spin_unlock_bh(&bond->ipsec_lock); - rcu_read_unlock(); + mutex_unlock(&bond->ipsec_lock); } static void bond_ipsec_free_sa(struct xfrm_state *xs) @@ -5922,7 +5921,7 @@ void bond_setup(struct net_device *bond_dev) /* set up xfrm device ops (only supported in active-backup right now) */ bond_dev->xfrmdev_ops = &bond_xfrmdev_ops; INIT_LIST_HEAD(&bond->ipsec_list); - spin_lock_init(&bond->ipsec_lock); + mutex_init(&bond->ipsec_lock); #endif /* CONFIG_XFRM_OFFLOAD */ /* don't acquire bond device's netif_tx_lock when transmitting */ @@ -5971,6 +5970,10 @@ static void bond_uninit(struct net_device *bond_dev) __bond_release_one(bond_dev, slave->dev, true, true); netdev_info(bond_dev, "Released all slaves\n"); +#ifdef CONFIG_XFRM_OFFLOAD + mutex_destroy(&bond->ipsec_lock); +#endif /* CONFIG_XFRM_OFFLOAD */ + bond_set_slave_arr(bond, NULL, NULL); list_del_rcu(&bond->bond_list); diff --git a/include/net/bonding.h b/include/net/bonding.h index b61fb1aa3a56..8bb5f016969f 100644 --- a/include/net/bonding.h +++ b/include/net/bonding.h @@ -260,7 +260,7 @@ struct bonding { #ifdef CONFIG_XFRM_OFFLOAD struct list_head ipsec_list; /* protecting ipsec_list */ - spinlock_t ipsec_lock; + struct mutex ipsec_lock; #endif /* CONFIG_XFRM_OFFLOAD */ struct bpf_prog *xdp_prog; };