aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/ip_input.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-07-26 07:14:38 -0400
committerDavid S. Miller <davem@davemloft.net>2012-07-26 18:50:39 -0400
commitc6cffba4ffa26a8ffacd0bb9f3144e34f20da7de (patch)
treeb67532a74343d42bcf8784b8e32d7cf6d69313db /net/ipv4/ip_input.c
parent4487e64de63b8e42efe5a5543871c42c5a5859d9 (diff)
ipv4: Fix input route performance regression.
With the routing cache removal we lost the "noref" code paths on input, and this can kill some routing workloads. Reinstate the noref path when we hit a cached route in the FIB nexthops. With help from Eric Dumazet. Reported-by: Alexander Duyck <alexander.duyck@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ip_input.c')
-rw-r--r--net/ipv4/ip_input.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c
index 93134b0eab0c..bda8cac2ae91 100644
--- a/net/ipv4/ip_input.c
+++ b/net/ipv4/ip_input.c
@@ -339,8 +339,8 @@ static int ip_rcv_finish(struct sk_buff *skb)
339 * how the packet travels inside Linux networking. 339 * how the packet travels inside Linux networking.
340 */ 340 */
341 if (!skb_dst(skb)) { 341 if (!skb_dst(skb)) {
342 int err = ip_route_input(skb, iph->daddr, iph->saddr, 342 int err = ip_route_input_noref(skb, iph->daddr, iph->saddr,
343 iph->tos, skb->dev); 343 iph->tos, skb->dev);
344 if (unlikely(err)) { 344 if (unlikely(err)) {
345 if (err == -EXDEV) 345 if (err == -EXDEV)
346 NET_INC_STATS_BH(dev_net(skb->dev), 346 NET_INC_STATS_BH(dev_net(skb->dev),