From patchwork Wed Dec 6 23:03:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cong Wang X-Patchwork-Id: 845394 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 (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="e1AlTzCe"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3ysZ1B1Q3Zz9s03 for ; Thu, 7 Dec 2017 10:03:58 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752540AbdLFXDv (ORCPT ); Wed, 6 Dec 2017 18:03:51 -0500 Received: from mail-pf0-f195.google.com ([209.85.192.195]:37109 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752498AbdLFXDm (ORCPT ); Wed, 6 Dec 2017 18:03:42 -0500 Received: by mail-pf0-f195.google.com with SMTP id n6so3179272pfa.4 for ; Wed, 06 Dec 2017 15:03:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kqr12TdcHavjtPnkPr1MX8Vc3XaICdKJRXra1Jek0jE=; b=e1AlTzCeFqLAe2q9LC4h7p1/6ClohB/Pb3Eklax0xEfDkS4gDg+R4czjugJdsTGVkA ykA4maNbGwbezNUFxNwYPMTtRgahG26HwVjx/wMqkSoJcnqo4oOvQx58iGztwHZtz7t8 XcWH1SY2ynrRVbCHWKneeqqBLOXtiO3UgK+wZtkhqM71hvu5ZADXn401SBUvIkg357pR GElsBlMnyg/r5eeYfPcQ1huo/Q25Saz/4RsSZjlqhnSPodzqfqU3Xk5bvTGOAwQTizxS DndSa/Q9ScsOOytKg4u1+q+7hSk9FOsgEByHj7TdCx2U8KX/kw2VF9az63UMxkeX5T7f rpKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kqr12TdcHavjtPnkPr1MX8Vc3XaICdKJRXra1Jek0jE=; b=McMX7nMZUZNIaw0L12dv5DkrFcHHyDKNzqYJ5iqH8Sr15nDbAMD+xoptTeRpUrnNhn xSwkMhXAxs7Jj7DYQWwwRovg0yauMVgLI57YUYEs0hMcHOV+qCadWZH/UOOVRvbXXNWx nXOxldCJcc/Qw0yvQJ9tMiXZAXhr85y22dPfGPjVWqlJWTh22mWgnYDTx/6cVXtGQ+a5 pWpPovAFDv0O7mLLzOSUs30lGkXqJicDBwxYk4W35XMjRYGQvK0TXxABJVjfplDiyBFo aA70aYiOTLQ7clGYkmXmXwFM6fD99gRlaCkUZXcMLLkZLGpzJ4F23UVWPmh9uBgBOzDZ 8CMQ== X-Gm-Message-State: AJaThX7zSfRW4yv5bmhKHM5t08JD4c/6BSSXyvVygMbtLiUY2f1Va8Tq Br2QZ4UzwXFLK38FO5LWT3LlXggm X-Google-Smtp-Source: AGs4zMbblF2Ng/F9JAFf1/ESgVzORDAxrXorVN2sm7GdHSuHT38bMdegCVwSic6GtzBUN1MYESDNvA== X-Received: by 10.99.179.65 with SMTP id x1mr22378495pgt.336.1512601422322; Wed, 06 Dec 2017 15:03:42 -0800 (PST) Received: from tw-172-25-30-113.office.twttr.net ([8.25.197.25]) by smtp.gmail.com with ESMTPSA id q22sm6475753pfj.94.2017.12.06.15.03.41 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 06 Dec 2017 15:03:41 -0800 (PST) From: Cong Wang To: netdev@vger.kernel.org Cc: Cong Wang , Daniel Borkmann Subject: [Patch net-next 2/2] netlink: convert netlink tap spinlock to mutex Date: Wed, 6 Dec 2017 15:03:20 -0800 Message-Id: <20171206230320.22191-3-xiyou.wangcong@gmail.com> X-Mailer: git-send-email 2.9.4 In-Reply-To: <20171206230320.22191-1-xiyou.wangcong@gmail.com> References: <20171206230320.22191-1-xiyou.wangcong@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Both netlink_add_tap() and netlink_remove_tap() are called in process context, no need to bother spinlock. Note, in fact, currently we always hold RTNL when calling these two functions, so we don't need any other lock at all, but keeping this lock doesn't harm anything. Cc: Daniel Borkmann Signed-off-by: Cong Wang --- net/netlink/af_netlink.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c index de5324cc98d4..f6e6d2278fa9 100644 --- a/net/netlink/af_netlink.c +++ b/net/netlink/af_netlink.c @@ -176,7 +176,7 @@ static unsigned int netlink_tap_net_id; struct netlink_tap_net { struct list_head netlink_tap_all; - spinlock_t netlink_tap_lock; + struct mutex netlink_tap_lock; }; int netlink_add_tap(struct netlink_tap *nt) @@ -187,9 +187,9 @@ int netlink_add_tap(struct netlink_tap *nt) if (unlikely(nt->dev->type != ARPHRD_NETLINK)) return -EINVAL; - spin_lock(&nn->netlink_tap_lock); + mutex_lock(&nn->netlink_tap_lock); list_add_rcu(&nt->list, &nn->netlink_tap_all); - spin_unlock(&nn->netlink_tap_lock); + mutex_unlock(&nn->netlink_tap_lock); __module_get(nt->module); @@ -204,7 +204,7 @@ static int __netlink_remove_tap(struct netlink_tap *nt) bool found = false; struct netlink_tap *tmp; - spin_lock(&nn->netlink_tap_lock); + mutex_lock(&nn->netlink_tap_lock); list_for_each_entry(tmp, &nn->netlink_tap_all, list) { if (nt == tmp) { @@ -216,7 +216,7 @@ static int __netlink_remove_tap(struct netlink_tap *nt) pr_warn("__netlink_remove_tap: %p not found\n", nt); out: - spin_unlock(&nn->netlink_tap_lock); + mutex_unlock(&nn->netlink_tap_lock); if (found) module_put(nt->module); @@ -240,7 +240,7 @@ static __net_init int netlink_tap_init_net(struct net *net) struct netlink_tap_net *nn = net_generic(net, netlink_tap_net_id); INIT_LIST_HEAD(&nn->netlink_tap_all); - spin_lock_init(&nn->netlink_tap_lock); + mutex_init(&nn->netlink_tap_lock); return 0; }