From patchwork Fri Jun 16 17:47: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: 776903 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 3wq7Bz6QhJz9s8N for ; Sat, 17 Jun 2017 03:48:27 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Isu+RPs7"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752462AbdFPRsZ (ORCPT ); Fri, 16 Jun 2017 13:48:25 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:34458 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752231AbdFPRsW (ORCPT ); Fri, 16 Jun 2017 13:48:22 -0400 Received: by mail-pg0-f67.google.com with SMTP id j186so7270584pge.1 for ; Fri, 16 Jun 2017 10:48:22 -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=Isu+RPs7bJGyp84yRG9HEv13KWJUpbRhlneXA7PZaAWLnqlpcu2fsh+5bGuMK0c8zT avohMBgNqIwaq08KcQak0LdC3v4Eq3245leE7kgZmIhif2EawAZmqCRQqu2O+AvHDiFO o6EPdpa0Z76hL8WQyIJMsEu1446cDb3U6S6mVEpGpKH7FL8p5gL+LIvE/2MpgGMVjh17 8lce+u/UXBM85I0DNSUUqRHX2bM5Z/ZU6Imb468TaTd/DxZOr/IrQpiz0IyLjhDHw2YD nHNHbe9xSqAEgGc0dnL4ua5N4df+g4oBVSDoksBYZ35PFSZeCLcZQ7kKDJiOkijdVzKS 1FXQ== 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=HWeQAgw23rWnB0UuOaHnpCQQneK5Ncl9GxrNhkJLcbKYgDit2SIdfKaTc8HkFZ4+ur uvrgrksJJ87BhpbFf9xFZOnX3rkMfy/7fLMWZIBY4lLO2Z32u07LF3E6WWDuRto90rao qWgKyGm4fUuXBp1sRzPHB0mUn+Z0sjnkzVzxsvXiS2Rh6g5gdi7wtQSs+yI+MBDC82Jb AndfpcALsUzpG7e8SpsiSTaUyLJvLBKkS/wSO8YdCG2U5lyRZ/gfqh8NSlzMk3PMjpRI cMbORzRORHsMrrArXbHeHQ6mF5mFWvKYw+h3I+TUt8klnmkq8AYLT3HPZX7o4n41YqCj 8NFA== X-Gm-Message-State: AKS2vOwpLPfhuwjKSXJZQcToGFXOwo/wNHhkkFbnpOqeWCXAEW6dp1+O Jhy94OHJxcTL2SknqXU= X-Received: by 10.99.16.65 with SMTP id 1mr12952568pgq.60.1497635301697; Fri, 16 Jun 2017 10:48:21 -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.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 16 Jun 2017 10:48:21 -0700 (PDT) From: Wei Wang To: David Miller , netdev@vger.kernel.org Cc: Eric Dumazet , Martin KaFai Lau , Wei Wang Subject: [PATCH net-next 03/21] net: use loopback dev when generating blackhole route Date: Fri, 16 Jun 2017 10:47:26 -0700 Message-Id: <20170616174744.139688-4-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 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;