Received: by 10.213.65.68 with SMTP id h4csp291797imn; Sat, 17 Mar 2018 04:12:11 -0700 (PDT) X-Google-Smtp-Source: AG47ELsN3KwFJ+vQzsvCVPzQpMZE5LhXue0XZBksa7HgFeIGDQEHOxM90xF7Hfj4O80KURzn62l8 X-Received: by 2002:a17:902:9a05:: with SMTP id v5-v6mr5330550plp.69.1521285131867; Sat, 17 Mar 2018 04:12:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521285131; cv=none; d=google.com; s=arc-20160816; b=Av/IwdOZd7hAnM4cTNkRI5qrmtTl9UvlqWQJj6hc99G/Ipa282adOQohCVd2uyTgUY sg4vyCbNYLmX95uUQY9hmMbFHp4no2t8pCzQaHQ5NL9SdjZxtvQfo+C+uJls58rFExj5 IFg/rigJc01c3AFaO/8l/GhZ+DsNvE+yv8Tc9/FVRKX5EAbCe6bdokKmGcUsf78VbA+q klrU1ZQiJPTGItsHGEYT1UVvJ/tBOhSQdMBDI4b01g6GjrIFMuMHVJAWvx9sqxNAQOcH GPgFU87WHALRTq7cc12ZKczaF2I0cpC9JyOPXBViLcWF7uFsSCh9myZpteBiBf9gKorB /hWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=9mVGSYcsI8H+36oI/xwnlNInsT8ktEiG0gBQj6GI6z4=; b=DGPRDslqxvh++986GLAk0sekk46/0RdoO0Na1wtJNT5zn4rJWELVmHuFp5iEVcRPOH ZUGzGPH5qvV+TQZKr77uYdA8tyz6KAxzNusCmzmSNVr9M+eSKIEO4tb8jqX/DdGtMkp6 HJThO2vPsdXPc4XwYPttXm31CYgNZJZnsvndS151EOK4k03hmCKYkphNPUfHzQKxVG9U xAQKIgNFN307k/SgZGZUrLJbUioVRkLqobvVXtZWksHo6yipSw9MkfctXuT/aSTUGx93 r5KrhQoyjOI/6v1jSzIdBV63ZzkOIeb5/4jSj4VX2X51zT59gycDAwNWNn1k/5Dh1oq4 pw0w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w23si6732674pgc.127.2018.03.17.04.11.19; Sat, 17 Mar 2018 04:12:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752340AbeCQLId (ORCPT + 99 others); Sat, 17 Mar 2018 07:08:33 -0400 Received: from mail-wr0-f194.google.com ([209.85.128.194]:43540 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751618AbeCQLIc (ORCPT ); Sat, 17 Mar 2018 07:08:32 -0400 Received: by mail-wr0-f194.google.com with SMTP id o1so13973745wro.10; Sat, 17 Mar 2018 04:08:31 -0700 (PDT) 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; bh=9mVGSYcsI8H+36oI/xwnlNInsT8ktEiG0gBQj6GI6z4=; b=OR1hxmXfTAjqBdH8vyV9vEU28nK/Y0ROTJV6R4/ZlS8aixNoJTAW0k5tyPxLGAJTt8 Dvjn1hwF/ojV1yz3Rc9xxTYt/0J6DGJlVzfYaM5b0tRK9SYfIVe3itsiRtSZkjOgK516 AbXEnQHQDVsO5owzhyClX1ivan6Ef9yZzRXv+2h1xINaiN1Wsy5jNexBE6HWEbcT5VoZ 0UP+fGAVgYM4yeh0HYDzurFWrWDiXHgC7FI/s2o8eMlSF/alUPpwRAtwopu8jvVsBhrZ bs9m7oO7Rv8T/fR1LfHvsxwkoq/7zEIBgDN5ApFQgt5c48SrFeDtpOzMmnpY+sky9wKB 4Hww== X-Gm-Message-State: AElRT7GZzPy9cInSjeaK0MWW86EmKGQvBadrrkTKVxV77U+84CEYvW2N cmREEk24oxbSyOTl3JwtiM8= X-Received: by 10.223.135.14 with SMTP id a14mr4422807wra.261.1521284910774; Sat, 17 Mar 2018 04:08:30 -0700 (PDT) Received: from localhost.localdomain ([2a02:8070:8895:9700:4c9d:d656:8952:c1b2]) by smtp.gmail.com with ESMTPSA id p29sm9833886wmf.3.2018.03.17.04.08.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 17 Mar 2018 04:08:29 -0700 (PDT) From: Christian Brauner To: ebiederm@xmission.com, gregkh@linuxfoundation.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: serge@hallyn.com, avagin@virtuozzo.com, ktkhai@virtuozzo.com, Christian Brauner Subject: [PATCH 1/2 v3] net: add uevent socket member Date: Sat, 17 Mar 2018 12:08:25 +0100 Message-Id: <20180317110826.1581-1-christian.brauner@ubuntu.com> X-Mailer: git-send-email 2.15.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This commit adds struct uevent_sock to struct net. Since struct uevent_sock records the position of the uevent socket in the uevent socket list we can trivially remove it from the uevent socket list during cleanup. This speeds up the old removal codepath. Note, list_del() will hit __list_del_entry_valid() in its call chain which will validate that the element is a member of the list. If it isn't it will take care that the list is not modified. Signed-off-by: Christian Brauner --- Changelog v2->v3: * patch added This patch was split out of the follow up patch Subject: [PATCH 2/2 v3] netns: send uevent messages Changelog v1->v2: * patch not present Changelog v0->v1: * patch not present --- include/net/net_namespace.h | 4 +++- lib/kobject_uevent.c | 19 +++++++++---------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index f306b2aa15a4..abd7d91bffac 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h @@ -40,7 +40,7 @@ struct net_device; struct sock; struct ctl_table_header; struct net_generic; -struct sock; +struct uevent_sock; struct netns_ipvs; @@ -79,6 +79,8 @@ struct net { struct sock *rtnl; /* rtnetlink socket */ struct sock *genl_sock; + struct uevent_sock *uevent_sock; /* uevent socket */ + struct list_head dev_base_head; struct hlist_head *dev_name_head; struct hlist_head *dev_index_head; diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c index 9fe6ec8fda28..cbdc60542cab 100644 --- a/lib/kobject_uevent.c +++ b/lib/kobject_uevent.c @@ -32,11 +32,13 @@ u64 uevent_seqnum; #ifdef CONFIG_UEVENT_HELPER char uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH; #endif -#ifdef CONFIG_NET + struct uevent_sock { struct list_head list; struct sock *sk; }; + +#ifdef CONFIG_NET static LIST_HEAD(uevent_sock_list); #endif @@ -621,6 +623,9 @@ static int uevent_net_init(struct net *net) kfree(ue_sk); return -ENODEV; } + + net->uevent_sock = ue_sk; + mutex_lock(&uevent_sock_mutex); list_add_tail(&ue_sk->list, &uevent_sock_list); mutex_unlock(&uevent_sock_mutex); @@ -629,22 +634,16 @@ static int uevent_net_init(struct net *net) static void uevent_net_exit(struct net *net) { - struct uevent_sock *ue_sk; + struct uevent_sock *ue_sk = net->uevent_sock; mutex_lock(&uevent_sock_mutex); - list_for_each_entry(ue_sk, &uevent_sock_list, list) { - if (sock_net(ue_sk->sk) == net) - goto found; - } - mutex_unlock(&uevent_sock_mutex); - return; - -found: list_del(&ue_sk->list); mutex_unlock(&uevent_sock_mutex); netlink_kernel_release(ue_sk->sk); kfree(ue_sk); + + return; } static struct pernet_operations uevent_net_ops = { -- 2.15.1