From patchwork Sat Jun 17 17:42: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: 777359 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 3wql443vJKz9s76 for ; Sun, 18 Jun 2017 03:44:36 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="vdP/BBao"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752991AbdFQRof (ORCPT ); Sat, 17 Jun 2017 13:44:35 -0400 Received: from mail-pg0-f66.google.com ([74.125.83.66]:35480 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752763AbdFQRnu (ORCPT ); Sat, 17 Jun 2017 13:43:50 -0400 Received: by mail-pg0-f66.google.com with SMTP id f127so10586434pgc.2 for ; Sat, 17 Jun 2017 10:43:50 -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=vdP/BBaoV6El7yoQ7SxFmaIsC9s/YXNl5cq5vk+gkderBGX30inoQWVHbPTNdKHKFz dML6uXhNb5jjaOSTzuP5A1CkvXHVf6NWNz+3csW5gb+5fTmf00Gp8iUwIUk/91whkbj9 XmDw+iUZie2U4Zqj9LkNIXX0mreG1wzOcsnOLo5xa312IHymcmQYlD3EjKbZGrQanM79 rxLpVLBNlL4/VN1R0AVHsEC3+eyOKvEl64fzVB1OGqjEgKFMaNPr2Tv9OmRBPowiVuCZ oCKHpkGuS5F4ajtoMRpLdXfG1CUv5JcyTIuTiHFPp/eyRLtLH88iTrcJOfny7OYp5n15 kCvA== 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=TYEVNoIdQGZRDSlCgh4cNJUw4pxxlspLBbeeCsWt7Kg6IfFZDq3C6dlixvm9H87RK7 Sfo/hiykoWNjiPSuTj4gNK8DPAPBpG7rj7fD2sPgVsWZpPTAgGzWuUXL7xkf7I0NBZaw +ccnHqKeN/fSH7tYNsqFydT8wJqxwFaeTpx0hAtZkuOHGZqboPbDMA1OqDya4ra9TIR/ V8jzlJSlVd204lXssaEzxoVXk47uik1CFPdFAXKVL4z9meIuZqeWmJiGYaPf+tl8/Bs9 7FMW0U1U6hAQzNxn4Cje+NyBoOs4KdFHbPCqVrc2C/uypJ97C38LSR92/r5MVzLNnXEe bYgw== X-Gm-Message-State: AKS2vOySRuSRmLLsBWU+mkn3hk/L9gFrdQDR++odxHdeCpBrQKqnw3pj uMFAF2AzSNlk3w== X-Received: by 10.101.90.199 with SMTP id d7mr17835346pgt.70.1497721424511; Sat, 17 Jun 2017 10:43:44 -0700 (PDT) Received: from weiwan0.mtv.corp.google.com ([100.123.230.66]) by smtp.gmail.com with ESMTPSA id h7sm11352777pfc.97.2017.06.17.10.43.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 17 Jun 2017 10:43:43 -0700 (PDT) From: Wei Wang To: David Miller , netdev@vger.kernel.org Cc: Eric Dumazet , Martin KaFai Lau , Wei Wang Subject: [PATCH v2 net-next 14/21] ipv6: get rid of icmp6 dst garbage collector Date: Sat, 17 Jun 2017 10:42:37 -0700 Message-Id: <20170617174244.132862-15-tracywwnj@gmail.com> X-Mailer: git-send-email 2.13.1.518.g3df882009-goog In-Reply-To: <20170617174244.132862-1-tracywwnj@gmail.com> References: <20170617174244.132862-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); }