Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754610AbbEMMtq (ORCPT ); Wed, 13 May 2015 08:49:46 -0400 Received: from cantor2.suse.de ([195.135.220.15]:48136 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752022AbbEMMtn (ORCPT ); Wed, 13 May 2015 08:49:43 -0400 Date: Wed, 13 May 2015 14:49:40 +0200 From: Michal Kubecek To: Nicolas Dichtel Cc: "David S. Miller" , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , Patrick McHardy Subject: Re: [PATCH net 1/2] ipv6: do not delete previously existing ECMP routes if add fails Message-ID: <20150513124940.GB27366@unicorn.suse.cz> References: <4e3d075f2be93d9655bc1372a107584368a29eab.1431500953.git.mkubecek@suse.cz> <55534389.8070307@6wind.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <55534389.8070307@6wind.com> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1963 Lines: 52 On Wed, May 13, 2015 at 02:28:57PM +0200, Nicolas Dichtel wrote: > Le 13/05/2015 11:50, Michal Kubecek a ?crit : > >If adding a nexthop of an IPv6 multipath route fails, comment in > >ip6_route_multipath() says we are going to delete all nexthops already > >added. However, current implementation deletes even the routes it > >hasn't even tried to add yet. For example, running > > > > ip route add 1234:5678::/64 \ > > nexthop via fe80::aa dev dummy1 \ > > nexthop via fe80::bb dev dummy1 \ > > nexthop via fe80::cc dev dummy1 > > > >twice results in removing all routes first command added. > > > >Limit the second (delete) run to nexthops that succeeded in the first > >(add) run. > > > >Fixes: 51ebd3181572 ("ipv6: add support of equal cost multipath (ECMP)") > >Signed-off-by: Michal Kubecek > >--- > > net/ipv6/route.c | 1 + > > 1 file changed, 1 insertion(+) > > > >diff --git a/net/ipv6/route.c b/net/ipv6/route.c > >index d3588885f097..18b92c05b541 100644 > >--- a/net/ipv6/route.c > >+++ b/net/ipv6/route.c > >@@ -2536,6 +2536,7 @@ beginning: > > * next hops that have been already added. > > */ > > add = 0; > >+ remaining = cfg->fc_mp_len - remaining; > > goto beginning; > Not sure to understand your fix. At the label beginning, the code is: > > beginning: > rtnh = (struct rtnexthop *)cfg->fc_mp; > remaining = cfg->fc_mp_len; > > Hence, 'remaining' will be overridden. How does your patch work? It does not, sorry. I'm still trying to find out what did I wrong while testing. I'll need to move the initialization of remaining above the label. Michal Kubecek -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/