ipv4: make sure nh_pcpu_rth_output is always allocated
Avoid checking nh_pcpu_rth_output in fast path, abort fib_info creation on alloc_percpu failure. Signed-off-by: Julian Anastasov <ja@ssi.bg> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e0adef0f74
commit
f8a17175c6
@ -840,6 +840,8 @@ struct fib_info *fib_create_info(struct fib_config *cfg)
|
||||
change_nexthops(fi) {
|
||||
nexthop_nh->nh_parent = fi;
|
||||
nexthop_nh->nh_pcpu_rth_output = alloc_percpu(struct rtable __rcu *);
|
||||
if (!nexthop_nh->nh_pcpu_rth_output)
|
||||
goto failure;
|
||||
} endfor_nexthops(fi)
|
||||
|
||||
if (cfg->fc_mx) {
|
||||
|
@ -1207,8 +1207,6 @@ static bool rt_cache_route(struct fib_nh *nh, struct rtable *rt)
|
||||
if (rt_is_input_route(rt)) {
|
||||
p = (struct rtable **)&nh->nh_rth_input;
|
||||
} else {
|
||||
if (!nh->nh_pcpu_rth_output)
|
||||
goto nocache;
|
||||
p = (struct rtable **)__this_cpu_ptr(nh->nh_pcpu_rth_output);
|
||||
}
|
||||
orig = *p;
|
||||
@ -1223,7 +1221,6 @@ static bool rt_cache_route(struct fib_nh *nh, struct rtable *rt)
|
||||
* unsuccessful at storing this route into the cache
|
||||
* we really need to set it.
|
||||
*/
|
||||
nocache:
|
||||
rt->dst.flags |= DST_NOCACHE;
|
||||
ret = false;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user