From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ido Schimmel Subject: Re: [RFC PATCH net-next 16/19] ipv6: Flush multipath routes when all siblings are dead Date: Wed, 3 Jan 2018 09:54:26 +0200 Message-ID: <20180103075426.GD761@splinter> References: <20171231161513.25785-1-idosch@mellanox.com> <20171231161513.25785-17-idosch@mellanox.com> <7a3fb99c-b441-4fb9-c2e7-99918258b809@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Ido Schimmel , netdev@vger.kernel.org, davem@davemloft.net, roopa@cumulusnetworks.com, nicolas.dichtel@6wind.com, mlxsw@mellanox.com To: David Ahern Return-path: Received: from out2-smtp.messagingengine.com ([66.111.4.26]:59229 "EHLO out2-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751183AbeACHy3 (ORCPT ); Wed, 3 Jan 2018 02:54:29 -0500 Content-Disposition: inline In-Reply-To: <7a3fb99c-b441-4fb9-c2e7-99918258b809@gmail.com> Sender: netdev-owner@vger.kernel.org List-ID: On Tue, Jan 02, 2018 at 10:38:19AM -0700, David Ahern wrote: > On 12/31/17 9:15 AM, Ido Schimmel wrote: > > @@ -3550,13 +3581,21 @@ static int fib6_ifdown(struct rt6_info *rt, void *p_arg) > > } > > return -2; > > case NETDEV_DOWN: > > - if (rt->dst.dev != dev) > > - break; > > - if (rt->rt6i_nsiblings == 0 || > > - !rt->rt6i_idev->cnf.ignore_routes_with_linkdown) > > + if (rt->should_flush) > > return -1; > > - rt->rt6i_nh_flags |= (RTNH_F_DEAD | RTNH_F_LINKDOWN); > > - break; > > + if (!rt->rt6i_nsiblings) > > + return rt->dst.dev == dev ? -1 : 0; > > + if (rt6_multipath_uses_dev(rt, dev)) { > > + if (rt->rt6i_nsiblings + 1 == > > + rt6_multipath_dead_count(rt, dev)) { > > I'd prefer a tmp variable to make that line more readable and still > within the 80 column guideline. > unsigned int count; > > count = rt6_multipath_dead_count(rt, dev); > if (rt->rt6i_nsiblings + 1 == count) { OK, will change. Thanks! > > > > + rt6_multipath_flush(rt); > > + return -1; > > + } > > + rt6_multipath_nh_flags_set(rt, dev, RTNH_F_DEAD | > > + RTNH_F_LINKDOWN); > > + fib6_update_sernum(rt); > > + } > > + return -2;