Re: [PATCH 0/4] Fix routing metrics
From: David Miller <davem@davemloft.net>
Date: 2012-02-10 18:26:17
From: Steffen Klassert <steffen.klassert@secunet.com> Date: Fri, 10 Feb 2012 09:44:25 +0100
On Fri, Feb 10, 2012 at 03:12:11AM -0500, David Miller wrote:quoted
From: Steffen Klassert <steffen.klassert@secunet.com> Date: Fri, 10 Feb 2012 08:51:07 +0100quoted
On Fri, Feb 10, 2012 at 02:38:15AM -0500, David Miller wrote:quoted
From: Steffen Klassert <steffen.klassert@secunet.com>quoted
I fully agree with you here. But we check for the genid just in rt_init_metrics() which is invoked only on route cache entry creation. There is no check when the metrics are accessed, because the metrics on the inetpeer are valid on every access.Every routing cache entry we will use after the flush will be a newly created one! All the old ones will be stop being used.Yes, I know that. All inetpeer metrics are updated once with the first new routing cache entry that binds that inetpeer to the route.And after a routing cache flush, that will be all routing cache entries every used after that point.Yes, the genid check happens once for every new routing cache entry we recreate. After that, we'll find maching routes in the cache and we don't do that check.quoted
So since this happens, you don't need to check the inetpeer at every metric access. The fact that all routing cache entries get recreated will do it for you.So if rt_init_metrics() is not the right place to check for genid changes, where would you suggest to do it?
It is the right place, and since it will happen there for every routing cache entry we use after a flush, the inetpeer issues will be taken care of by it. Therefore you don't need to check anything at metrics access time.