Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c10237e0 authored by David S. Miller's avatar David S. Miller
Browse files

Revert "ipv4: tcp: dont cache unconfirmed intput dst"



This reverts commit c074da28.

This change has several unwanted side effects:

1) Sockets will cache the DST_NOCACHE route in sk->sk_rx_dst and we'll
   thus never create a real cached route.

2) All TCP traffic will use DST_NOCACHE and never use the routing
   cache at all.

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e440cf2c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@

/* This is used to register protocols. */
struct net_protocol {
	int			(*early_demux)(struct sk_buff *skb, bool *nocache);
	int			(*early_demux)(struct sk_buff *skb);
	int			(*handler)(struct sk_buff *skb);
	void			(*err_handler)(struct sk_buff *skb, u32 info);
	int			(*gso_send_check)(struct sk_buff *skb);
+4 −4
Original line number Diff line number Diff line
@@ -201,18 +201,18 @@ static inline struct rtable *ip_route_output_gre(struct net *net, struct flowi4
}

extern int ip_route_input_common(struct sk_buff *skb, __be32 dst, __be32 src,
				 u8 tos, struct net_device *devin, bool noref, bool nocache);
				 u8 tos, struct net_device *devin, bool noref);

static inline int ip_route_input(struct sk_buff *skb, __be32 dst, __be32 src,
				 u8 tos, struct net_device *devin)
{
	return ip_route_input_common(skb, dst, src, tos, devin, false, false);
	return ip_route_input_common(skb, dst, src, tos, devin, false);
}

static inline int ip_route_input_noref(struct sk_buff *skb, __be32 dst, __be32 src,
				       u8 tos, struct net_device *devin, bool nocache)
				       u8 tos, struct net_device *devin)
{
	return ip_route_input_common(skb, dst, src, tos, devin, true, nocache);
	return ip_route_input_common(skb, dst, src, tos, devin, true);
}

extern void ipv4_update_pmtu(struct sk_buff *skb, struct net *net, u32 mtu,
+1 −1
Original line number Diff line number Diff line
@@ -325,7 +325,7 @@ extern void tcp_v4_err(struct sk_buff *skb, u32);

extern void tcp_shutdown (struct sock *sk, int how);

extern int tcp_v4_early_demux(struct sk_buff *skb, bool *nocache);
extern int tcp_v4_early_demux(struct sk_buff *skb);
extern int tcp_v4_rcv(struct sk_buff *skb);

extern struct inet_peer *tcp_v4_get_peer(struct sock *sk);
+1 −1
Original line number Diff line number Diff line
@@ -828,7 +828,7 @@ static int arp_process(struct sk_buff *skb)
	}

	if (arp->ar_op == htons(ARPOP_REQUEST) &&
	    ip_route_input_noref(skb, tip, sip, 0, dev, false) == 0) {
	    ip_route_input_noref(skb, tip, sip, 0, dev) == 0) {

		rt = skb_rtable(skb);
		addr_type = rt->rt_type;
+1 −1
Original line number Diff line number Diff line
@@ -259,7 +259,7 @@ static void ip_expire(unsigned long arg)
		skb_dst_drop(head);
		iph = ip_hdr(head);
		err = ip_route_input_noref(head, iph->daddr, iph->saddr,
					   iph->tos, head->dev, false);
					   iph->tos, head->dev);
		if (err)
			goto out_rcu_unlock;

Loading