From patchwork Sat Jun 17 17:42:26 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Wang X-Patchwork-Id: 777346 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 3wql3G6z6nz9s7M for ; Sun, 18 Jun 2017 03:43:54 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="IZ0Wr01P"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752712AbdFQRnm (ORCPT ); Sat, 17 Jun 2017 13:43:42 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:35870 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752665AbdFQRnk (ORCPT ); Sat, 17 Jun 2017 13:43:40 -0400 Received: by mail-pg0-f67.google.com with SMTP id e187so1835082pgc.3 for ; Sat, 17 Jun 2017 10:43:39 -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=P5x52CV4ES+nPh7iA2D7wuK8Var+gI+Jf2d/UZ0hts0=; b=IZ0Wr01P9V7L89dC71graeI10ngESzI2Ohu2VngmlXCFh9eizA3VQmH3fCfu7p5xa/ v+BGTLJ1Zedu0B3H7lfXWt5BoAEyz9G6i51txYADSsg4qJj8w3ZU2/4pyzK0Iu/0Oyea YprKslqrc4j/Alc298YQIOpCTIDGMsdMrn2P9KBCkbVHDGVRvDHnryypTwYugDXVb+71 BM4uaYGB1tl842WR4UI3XubxAEFMwCgPMAl8LD4/65OkabFg7QLfy45e6+Osg/+6A2YZ Ogpxoluc4pqNCZmmmm0vsgzZS6fwv+Mkyxr2kawE9YcNft+f4qKxq9WDTGkQYcdH1pLt o4cA== 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=P5x52CV4ES+nPh7iA2D7wuK8Var+gI+Jf2d/UZ0hts0=; b=s5447qLziopH7y8/FvawbyodC3SJttVJSDcJ/tHxPEkmFdDCzYerC6IGFWd83sa1AL fgK4I3tPTqWhU7hOrnF2LQNffYd3C6bkDO7INBO4dTznDMB+X9Zw8T/wuhKKjv3GusZh ttOJB8ALM10lW5tof56h6bXzN8PQMh+aniVZYSlKZF265xR42q9RVVrSjDm8zS/ncjEz sRv2xXb0sV0/HqPZeRkHI7VBYECi9xmnR6KrHW9RFArpTbtTrXAqQtPkjOpksPbSTsId /kTMGuJ8w9ZmnuHT+PON/+UXGrXKvoaIF2PkByJJHQrV1T1O77HBsahQfQzkWeQW9eY5 +qnQ== X-Gm-Message-State: AKS2vOxNnowAI5/M02m46GWByeL/CYa4JKEGppxLAZOOgwg6LSk/9fBg Pu5588MOOiGNwg== X-Received: by 10.84.216.21 with SMTP id m21mr15821067pli.294.1497721414472; Sat, 17 Jun 2017 10:43:34 -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.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 17 Jun 2017 10:43:33 -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 03/21] net: use loopback dev when generating blackhole route Date: Sat, 17 Jun 2017 10:42:26 -0700 Message-Id: <20170617174244.132862-4-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 Existing ipv4/6_blackhole_route() code generates a blackhole route with dst->dev pointing to the passed in dst->dev. It is not necessary to hold reference to the passed in dst->dev because the packets going through this route are dropped anyway. A loopback interface is good enough so that we don't need to worry about releasing this dst->dev when this dev is going down. Signed-off-by: Wei Wang Acked-by: Martin KaFai Lau --- net/ipv4/route.c | 2 +- net/ipv6/route.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 9b38cf18144e..0a843ef2b709 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -2504,7 +2504,7 @@ struct dst_entry *ipv4_blackhole_route(struct net *net, struct dst_entry *dst_or new->input = dst_discard; new->output = dst_discard_out; - new->dev = ort->dst.dev; + new->dev = net->loopback_dev; if (new->dev) dev_hold(new->dev); diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 18fe6e2b88d5..bc1bc91bb969 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -1245,9 +1245,12 @@ EXPORT_SYMBOL_GPL(ip6_route_output_flags); struct dst_entry *ip6_blackhole_route(struct net *net, struct dst_entry *dst_orig) { struct rt6_info *rt, *ort = (struct rt6_info *) dst_orig; + struct net_device *loopback_dev = net->loopback_dev; struct dst_entry *new = NULL; - rt = dst_alloc(&ip6_dst_blackhole_ops, ort->dst.dev, 1, DST_OBSOLETE_NONE, 0); + + rt = dst_alloc(&ip6_dst_blackhole_ops, loopback_dev, 1, + DST_OBSOLETE_NONE, 0); if (rt) { rt6_info_init(rt); @@ -1257,10 +1260,8 @@ struct dst_entry *ip6_blackhole_route(struct net *net, struct dst_entry *dst_ori new->output = dst_discard_out; dst_copy_metrics(new, &ort->dst); - rt->rt6i_idev = ort->rt6i_idev; - if (rt->rt6i_idev) - in6_dev_hold(rt->rt6i_idev); + rt->rt6i_idev = in6_dev_get(loopback_dev); rt->rt6i_gateway = ort->rt6i_gateway; rt->rt6i_flags = ort->rt6i_flags & ~RTF_PCPU; rt->rt6i_metric = 0;