From patchwork Wed Nov 8 19:23:46 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Francesco Ruggeri X-Patchwork-Id: 835965 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=arista.com header.i=@arista.com header.b="PGyT7vvG"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yXGS71pcrz9s3w for ; Thu, 9 Nov 2017 06:23:51 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752324AbdKHTXu (ORCPT ); Wed, 8 Nov 2017 14:23:50 -0500 Received: from prod-mx.aristanetworks.com ([162.210.130.12]:17738 "EHLO prod-mx.aristanetworks.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752303AbdKHTXs (ORCPT ); Wed, 8 Nov 2017 14:23:48 -0500 Received: from prod-mx.aristanetworks.com (localhost [127.0.0.1]) by prod-mx.aristanetworks.com (Postfix) with ESMTP id 26707B258; Wed, 8 Nov 2017 11:23:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=arista.com; s=AristaCom; t=1510169028; bh=NEvPpBN8J6pKtyo6Nk/+CJK3exjU5J2nUlqYT5UtvQc=; h=Date:To:Subject:From; b=PGyT7vvGe+XFUG9L6EXCdxFJy5IV3Ql3llIdWxNpapPTR86NGdAU9p5dZDLrm0RCr ZrzBF3tEDypUsUbALojLfRt+7YOH+b6fkQsVBHvudeCM08agFIIdDg9WPFnfLLl+cq u895eDmRy6C/uAMq3geVFYzajBb0m0hMle1Q5LTI= Received: from fruggeri-Arora18_1.sjc.aristanetworks.com (unknown [10.95.5.227]) by prod-mx.aristanetworks.com (Postfix) with ESMTP id 185F8B24E; Wed, 8 Nov 2017 11:23:48 -0800 (PST) Received: by fruggeri-Arora18_1.sjc.aristanetworks.com (Postfix, from userid 10189) id 0E52D40383; Wed, 8 Nov 2017 11:23:47 -0800 (PST) Date: Wed, 08 Nov 2017 11:23:46 -0800 To: yoshfuji@linux-ipv6.org, kuznet@ms2.inr.ac.ru, davem@davemloft.net, fruggeri@arista.com, netdev@vger.kernel.org Subject: [PATCH net-next v2] ipv6: try not to take rtnl_lock in ip6mr_sk_done User-Agent: Heirloom mailx 12.5 7/5/10 MIME-Version: 1.0 Message-Id: <20171108192347.0E52D40383@fruggeri-Arora18_1.sjc.aristanetworks.com> From: fruggeri@arista.com (Francesco Ruggeri) Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Avoid traversing the list of mr6_tables (which requires the rtnl_lock) in ip6mr_sk_done(), when we know in advance that a match will not be found. This can happen when rawv6_close()/ip6mr_sk_done() is invoked on non-mroute6 sockets. This patch helps reduce rtnl_lock contention when destroying a large number of net namespaces, each having a non-mroute6 raw socket. v2: same patch, only fixed subject line and expanded comment. Signed-off-by: Francesco Ruggeri diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index f5500f5..e1bb2d8 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c @@ -1617,6 +1617,10 @@ int ip6mr_sk_done(struct sock *sk) struct net *net = sock_net(sk); struct mr6_table *mrt; + if (sk->sk_type != SOCK_RAW || + inet_sk(sk)->inet_num != IPPROTO_ICMPV6) + return err; + rtnl_lock(); ip6mr_for_each_table(mrt, net) { if (sk == mrt->mroute6_sk) {