From patchwork Fri Jun 16 17:47:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 776906 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3wq7C81FgNz9s8N for ; Sat, 17 Jun 2017 03:48:36 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="GvTpvLfv"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752582AbdFPRse (ORCPT ); Fri, 16 Jun 2017 13:48:34 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:35381 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752548AbdFPRsc (ORCPT ); Fri, 16 Jun 2017 13:48:32 -0400 Received: by mail-pg0-f67.google.com with SMTP id f127so7263792pgc.2 for ; Fri, 16 Jun 2017 10:48:32 -0700 (PDT) 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=LDzFycnX3vz3CDNR9rRMWWaSwVWR8TsM14vddG8CVpg=; b=GvTpvLfv35NLbphhEZTDh+p2V83oBcraiKATs/YkDiIssQObpkVMS7+1rjucoqXoDq hK500U9EacRyl/z/sxXZFIcxrT8ixrABzMTmYuLclkrvCSPRRRnfVn3u1SdhY0YqwXzS rAjwMaTlh12vswzIBYnvnmBfnEnJmlrrrQETyVue2k8jHoFsS9HKb/D99VH7IJVhdKJT UeVtHNqPT/fX6MxaH62uEl6HURAfqJQP751kr6NI/PF25QiYU19EHtv4SaoyK8NhuTAJ v4Noq5TyGfbXq/NllRWdboqDJCtnI8bYKsilg9FLs5F1mq7VOhkExp+ZkussKQ8Xwten XC2Q== 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=LDzFycnX3vz3CDNR9rRMWWaSwVWR8TsM14vddG8CVpg=; b=GeDQB9nFEbazBrGEOZZNnXnQGiX8y/8pSUkUJXlAsTRsyJBFtqP3R/ZVGX0yRti+UI 0nrxxY3AEUb0GMJHhDmrwirGa+u89/gOvjA9fHfDewAgiVzo9urcCmpNor0hEUcgUtCF N5Mz33sjirVyaj+fLCFnNAYu+ncD6HtW5uqWS4bwzS2xTWbcfOjOy89h8U3rqW5GCem9 MIyk0yebBOVzKUX68EDpth1iAqpsprc5wdhoP0c0LvZtgHP2bhIjZwZqP4bFwWsjby8p 95eNzVC1kL88jChkjkDYCWJ8SUEZtWpNnKnpjFdaLCZFRBTLRO1HZL0M9M8oi+6hKeRW IMyg== X-Gm-Message-State: AKS2vOxXWNYzaaY7cjlBaoIFRmDkl/LttdHCtTPg3XJyz+7IiRe597K+ V4e1zEMmhuVg2Q== X-Received: by 10.98.210.199 with SMTP id c190mr12576412pfg.157.1497635311614; Fri, 16 Jun 2017 10:48:31 -0700 (PDT) Received: from weiwan0.mtv.corp.google.com ([100.123.230.66]) by smtp.gmail.com with ESMTPSA id v62sm5292290pfb.124.2017.06.16.10.48.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 16 Jun 2017 10:48:31 -0700 (PDT) From: Wei Wang To: David Miller , netdev@vger.kernel.org Cc: Eric Dumazet , Martin KaFai Lau , Wei Wang Subject: [PATCH net-next 14/21] ipv6: get rid of icmp6 dst garbage collector Date: Fri, 16 Jun 2017 10:47:37 -0700 Message-Id: <20170616174744.139688-15-tracywwnj@gmail.com> X-Mailer: git-send-email 2.13.1.518.g3df882009-goog In-Reply-To: <20170616174744.139688-1-tracywwnj@gmail.com> References: <20170616174744.139688-1-tracywwnj@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Wei Wang icmp6 dst route is currently ref counted during creation and will be freed by user during its call of dst_release(). So no need of a garbage collector for it. Remove all icmp6 dst garbage collector related code. Signed-off-by: Wei Wang Acked-by: Martin KaFai Lau --- include/net/ip6_route.h | 1 - net/ipv6/ip6_fib.c | 3 +-- net/ipv6/route.c | 46 ---------------------------------------------- 3 files changed, 1 insertion(+), 49 deletions(-) diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index f3da9dd2a8db..0fbf73dd531a 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h @@ -116,7 +116,6 @@ struct rt6_info *rt6_lookup(struct net *net, const struct in6_addr *daddr, const struct in6_addr *saddr, int oif, int flags); struct dst_entry *icmp6_dst_alloc(struct net_device *dev, struct flowi6 *fl6); -int icmp6_dst_gc(void); void fib6_force_start_gc(struct net *net); diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c index e3b35e146eef..c67ec79bf0da 100644 --- a/net/ipv6/ip6_fib.c +++ b/net/ipv6/ip6_fib.c @@ -1822,8 +1822,7 @@ void fib6_run_gc(unsigned long expires, struct net *net, bool force) } gc_args.timeout = expires ? (int)expires : net->ipv6.sysctl.ip6_rt_gc_interval; - - gc_args.more = icmp6_dst_gc(); + gc_args.more = 0; fib6_clean_all(net, fib6_age, &gc_args); now = jiffies; diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 5f859ee67172..c88044b8fa7c 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -1657,9 +1657,6 @@ static unsigned int ip6_mtu(const struct dst_entry *dst) return mtu - lwtunnel_headroom(dst->lwtstate, mtu); } -static struct dst_entry *icmp6_dst_gc_list; -static DEFINE_SPINLOCK(icmp6_dst_lock); - struct dst_entry *icmp6_dst_alloc(struct net_device *dev, struct flowi6 *fl6) { @@ -1697,48 +1694,6 @@ struct dst_entry *icmp6_dst_alloc(struct net_device *dev, return dst; } -int icmp6_dst_gc(void) -{ - struct dst_entry *dst, **pprev; - int more = 0; - - spin_lock_bh(&icmp6_dst_lock); - pprev = &icmp6_dst_gc_list; - - while ((dst = *pprev) != NULL) { - if (!atomic_read(&dst->__refcnt)) { - *pprev = dst->next; - dst_free(dst); - } else { - pprev = &dst->next; - ++more; - } - } - - spin_unlock_bh(&icmp6_dst_lock); - - return more; -} - -static void icmp6_clean_all(int (*func)(struct rt6_info *rt, void *arg), - void *arg) -{ - struct dst_entry *dst, **pprev; - - spin_lock_bh(&icmp6_dst_lock); - pprev = &icmp6_dst_gc_list; - while ((dst = *pprev) != NULL) { - struct rt6_info *rt = (struct rt6_info *) dst; - if (func(rt, arg)) { - *pprev = dst->next; - dst_free(dst); - } else { - pprev = &dst->next; - } - } - spin_unlock_bh(&icmp6_dst_lock); -} - static int ip6_dst_gc(struct dst_ops *ops) { struct net *net = container_of(ops, struct net, ipv6.ip6_dst_ops); @@ -2856,7 +2811,6 @@ void rt6_ifdown(struct net *net, struct net_device *dev) }; fib6_clean_all(net, fib6_ifdown, &adn); - icmp6_clean_all(fib6_ifdown, &adn); if (dev) rt6_uncached_list_flush_dev(net, dev); }