diff options
Diffstat (limited to 'net/core/dst_cache.c')
| -rw-r--r-- | net/core/dst_cache.c | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/net/core/dst_cache.c b/net/core/dst_cache.c index 0ccfd5fa5cb9..6a0482e676d3 100644 --- a/net/core/dst_cache.c +++ b/net/core/dst_cache.c @@ -47,7 +47,8 @@ static struct dst_entry *dst_cache_per_cpu_get(struct dst_cache *dst_cache,  	/* the cache already hold a dst reference; it can't go away */  	dst_hold(dst); -	if (unlikely(!time_after(idst->refresh_ts, dst_cache->reset_ts) || +	if (unlikely(!time_after(idst->refresh_ts, +				 READ_ONCE(dst_cache->reset_ts)) ||  		     (dst->obsolete && !dst->ops->check(dst, idst->cookie)))) {  		dst_cache_per_cpu_dst_set(idst, NULL, 0);  		dst_release(dst); @@ -83,7 +84,7 @@ struct rtable *dst_cache_get_ip4(struct dst_cache *dst_cache, __be32 *saddr)  		return NULL;  	*saddr = idst->in_saddr.s_addr; -	return container_of(dst, struct rtable, dst); +	return dst_rtable(dst);  }  EXPORT_SYMBOL_GPL(dst_cache_get_ip4); @@ -111,8 +112,8 @@ void dst_cache_set_ip6(struct dst_cache *dst_cache, struct dst_entry *dst,  		return;  	idst = this_cpu_ptr(dst_cache->cache); -	dst_cache_per_cpu_dst_set(this_cpu_ptr(dst_cache->cache), dst, -				  rt6_get_cookie((struct rt6_info *)dst)); +	dst_cache_per_cpu_dst_set(idst, dst, +				  rt6_get_cookie(dst_rt6_info(dst)));  	idst->in6_saddr = *saddr;  }  EXPORT_SYMBOL_GPL(dst_cache_set_ip6); @@ -170,7 +171,7 @@ void dst_cache_reset_now(struct dst_cache *dst_cache)  	if (!dst_cache->cache)  		return; -	dst_cache->reset_ts = jiffies; +	dst_cache_reset(dst_cache);  	for_each_possible_cpu(i) {  		struct dst_cache_pcpu *idst = per_cpu_ptr(dst_cache->cache, i);  		struct dst_entry *dst = idst->dst;  |