From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Miller Subject: Re: [PATCH] ipv4 routing: Fixes to allow route cache entries to work when route caching is disabled Date: Tue, 23 Jun 2009 16:37:15 -0700 (PDT) Message-ID: <20090623.163715.181992690.davem@davemloft.net> References: <20090622183955.GC14673@hmsreliant.think-freely.org> <20090622195712.GC2737@ami.dom.local> <20090622201853.GA16295@hmsreliant.think-freely.org> Mime-Version: 1.0 Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: jarkao2@gmail.com, netdev@vger.kernel.org, kuznet@ms2.inr.ac.ru, pekkas@netcore.fi, jmorris@namei.org, yoshfuji@linux-ipv6.org, kaber@trash.net, mbizon@freebox.fr To: nhorman@tuxdriver.com Return-path: Received: from 74-93-104-97-Washington.hfc.comcastbusiness.net ([74.93.104.97]:44975 "EHLO sunset.davemloft.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754874AbZFWXhL (ORCPT ); Tue, 23 Jun 2009 19:37:11 -0400 In-Reply-To: <20090622201853.GA16295@hmsreliant.think-freely.org> Sender: netdev-owner@vger.kernel.org List-ID: From: Neil Horman Date: Mon, 22 Jun 2009 16:18:53 -0400 > Ensure that route cache entries are usable and reclaimable with caching is off > > When route caching is disabled (rt_caching returns false), We still use route > cache entries that are created and passed into rt_intern_hash once. These > routes need to be made usable for the one call path that holds a reference to > them, and they need to be reclaimed when they're finished with their use. To be > made usable, they need to be associated with a neighbor table entry (which they > currently are not), otherwise iproute_finish2 just discards the packet, since we > don't know which L2 peer to send the packet to. To do this binding, we need to > follow the path a bit higher up in rt_intern_hash, which calls > arp_bind_neighbour, but not assign the route entry to the hash table. > Currently, if caching is off, we simply assign the route to the rp pointer and > are reutrn success. This patch associates us with a neighbor entry first. > > Secondly, we need to make sure that any single use routes like this are known to > the garbage collector when caching is off. If caching is off, and we try to > hash in a route, it will leak when its refcount reaches zero. To avoid this, > this patch calls rt_free on the route cache entry passed into rt_intern_hash. > This places us on the gc list for the route cache garbage collector, so that > when its refcount reaches zero, it will be reclaimed (Thanks to Alexey for this > suggestion). > > I've tested this on a local system here, and with these patches in place, I'm > able to maintain routed connectivity to remote systems, even if I set > /proc/sys/net/ipv4/rt_cache_rebuild_count to -1, which forces rt_caching to > return false. > > Signed-off-by: Neil Horman > Reported-by: Jarek Poplawski > Reported-by: Maxime Bizon Applied, thanks!