Commit f187bc6e authored by David S. Miller's avatar David S. Miller

ipv4: No need to set generic neighbour pointer.

Nobody reads it any longer.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 97cac082
...@@ -1111,16 +1111,6 @@ static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst, ...@@ -1111,16 +1111,6 @@ static struct neighbour *ipv4_neigh_lookup(const struct dst_entry *dst,
return neigh_create(&arp_tbl, pkey, dev); return neigh_create(&arp_tbl, pkey, dev);
} }
static int rt_bind_neighbour(struct rtable *rt)
{
struct neighbour *n = ipv4_neigh_lookup(&rt->dst, NULL, &rt->rt_gateway);
if (IS_ERR(n))
return PTR_ERR(n);
dst_set_neighbour(&rt->dst, n);
return 0;
}
static struct rtable *rt_intern_hash(unsigned int hash, struct rtable *rt, static struct rtable *rt_intern_hash(unsigned int hash, struct rtable *rt,
struct sk_buff *skb, int ifindex) struct sk_buff *skb, int ifindex)
{ {
...@@ -1129,7 +1119,6 @@ static struct rtable *rt_intern_hash(unsigned int hash, struct rtable *rt, ...@@ -1129,7 +1119,6 @@ static struct rtable *rt_intern_hash(unsigned int hash, struct rtable *rt,
unsigned long now; unsigned long now;
u32 min_score; u32 min_score;
int chain_length; int chain_length;
int attempts = !in_softirq();
restart: restart:
chain_length = 0; chain_length = 0;
...@@ -1156,15 +1145,6 @@ static struct rtable *rt_intern_hash(unsigned int hash, struct rtable *rt, ...@@ -1156,15 +1145,6 @@ static struct rtable *rt_intern_hash(unsigned int hash, struct rtable *rt,
*/ */
rt->dst.flags |= DST_NOCACHE; rt->dst.flags |= DST_NOCACHE;
if (rt->rt_type == RTN_UNICAST || rt_is_output_route(rt)) {
int err = rt_bind_neighbour(rt);
if (err) {
net_warn_ratelimited("Neighbour table failure & not caching routes\n");
ip_rt_put(rt);
return ERR_PTR(err);
}
}
goto skip_hashing; goto skip_hashing;
} }
...@@ -1247,40 +1227,6 @@ static struct rtable *rt_intern_hash(unsigned int hash, struct rtable *rt, ...@@ -1247,40 +1227,6 @@ static struct rtable *rt_intern_hash(unsigned int hash, struct rtable *rt,
} }
} }
/* Try to bind route to arp only if it is output
route or unicast forwarding path.
*/
if (rt->rt_type == RTN_UNICAST || rt_is_output_route(rt)) {
int err = rt_bind_neighbour(rt);
if (err) {
spin_unlock_bh(rt_hash_lock_addr(hash));
if (err != -ENOBUFS) {
rt_drop(rt);
return ERR_PTR(err);
}
/* Neighbour tables are full and nothing
can be released. Try to shrink route cache,
it is most likely it holds some neighbour records.
*/
if (attempts-- > 0) {
int saved_elasticity = ip_rt_gc_elasticity;
int saved_int = ip_rt_gc_min_interval;
ip_rt_gc_elasticity = 1;
ip_rt_gc_min_interval = 0;
rt_garbage_collect(&ipv4_dst_ops);
ip_rt_gc_min_interval = saved_int;
ip_rt_gc_elasticity = saved_elasticity;
goto restart;
}
net_warn_ratelimited("Neighbour table overflow\n");
rt_drop(rt);
return ERR_PTR(-ENOBUFS);
}
}
rt->dst.rt_next = rt_hash_table[hash].chain; rt->dst.rt_next = rt_hash_table[hash].chain;
/* /*
...@@ -1388,26 +1334,24 @@ static void check_peer_redir(struct dst_entry *dst, struct inet_peer *peer) ...@@ -1388,26 +1334,24 @@ static void check_peer_redir(struct dst_entry *dst, struct inet_peer *peer)
{ {
struct rtable *rt = (struct rtable *) dst; struct rtable *rt = (struct rtable *) dst;
__be32 orig_gw = rt->rt_gateway; __be32 orig_gw = rt->rt_gateway;
struct neighbour *n, *old_n; struct neighbour *n;
dst_confirm(&rt->dst); dst_confirm(&rt->dst);
rt->rt_gateway = peer->redirect_learned.a4; rt->rt_gateway = peer->redirect_learned.a4;
n = ipv4_neigh_lookup(&rt->dst, NULL, &rt->rt_gateway); n = ipv4_neigh_lookup(&rt->dst, NULL, &rt->rt_gateway);
if (IS_ERR(n)) { if (!n) {
rt->rt_gateway = orig_gw; rt->rt_gateway = orig_gw;
return; return;
} }
old_n = xchg(&rt->dst._neighbour, n);
if (old_n)
neigh_release(old_n);
if (!(n->nud_state & NUD_VALID)) { if (!(n->nud_state & NUD_VALID)) {
neigh_event_send(n, NULL); neigh_event_send(n, NULL);
} else { } else {
rt->rt_flags |= RTCF_REDIRECTED; rt->rt_flags |= RTCF_REDIRECTED;
call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, n); call_netevent_notifiers(NETEVENT_NEIGH_UPDATE, n);
} }
neigh_release(n);
} }
/* called in rcu_read_lock() section */ /* called in rcu_read_lock() section */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment