mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
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>
This commit is contained in:
parent
4487e64de6
commit
c6cffba4ff
7 changed files with 48 additions and 37 deletions
|
@ -30,6 +30,7 @@
|
|||
#include <net/inet_sock.h>
|
||||
#include <linux/in_route.h>
|
||||
#include <linux/rtnetlink.h>
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/route.h>
|
||||
#include <linux/ip.h>
|
||||
#include <linux/cache.h>
|
||||
|
@ -157,8 +158,22 @@ static inline struct rtable *ip_route_output_gre(struct net *net, struct flowi4
|
|||
return ip_route_output_key(net, fl4);
|
||||
}
|
||||
|
||||
extern int ip_route_input(struct sk_buff *skb, __be32 dst, __be32 src,
|
||||
u8 tos, struct net_device *devin);
|
||||
extern int ip_route_input_noref(struct sk_buff *skb, __be32 dst, __be32 src,
|
||||
u8 tos, struct net_device *devin);
|
||||
|
||||
static inline int ip_route_input(struct sk_buff *skb, __be32 dst, __be32 src,
|
||||
u8 tos, struct net_device *devin)
|
||||
{
|
||||
int err;
|
||||
|
||||
rcu_read_lock();
|
||||
err = ip_route_input_noref(skb, dst, src, tos, devin);
|
||||
if (!err)
|
||||
skb_dst_force(skb);
|
||||
rcu_read_unlock();
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
extern void ipv4_update_pmtu(struct sk_buff *skb, struct net *net, u32 mtu,
|
||||
int oif, u32 mark, u8 protocol, int flow_flags);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue