diff options
Diffstat (limited to 'net/ipv4/tcp_ipv4.c')
-rw-r--r-- | net/ipv4/tcp_ipv4.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 42b2a6a73092..767823764016 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -1627,9 +1627,6 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb) | |||
1627 | sk->sk_rx_dst = NULL; | 1627 | sk->sk_rx_dst = NULL; |
1628 | } | 1628 | } |
1629 | } | 1629 | } |
1630 | if (unlikely(sk->sk_rx_dst == NULL)) | ||
1631 | inet_sk_rx_dst_set(sk, skb); | ||
1632 | |||
1633 | if (tcp_rcv_established(sk, skb, tcp_hdr(skb), skb->len)) { | 1630 | if (tcp_rcv_established(sk, skb, tcp_hdr(skb), skb->len)) { |
1634 | rsk = sk; | 1631 | rsk = sk; |
1635 | goto reset; | 1632 | goto reset; |
@@ -1872,10 +1869,21 @@ static struct timewait_sock_ops tcp_timewait_sock_ops = { | |||
1872 | .twsk_destructor= tcp_twsk_destructor, | 1869 | .twsk_destructor= tcp_twsk_destructor, |
1873 | }; | 1870 | }; |
1874 | 1871 | ||
1872 | void inet_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb) | ||
1873 | { | ||
1874 | struct dst_entry *dst = skb_dst(skb); | ||
1875 | |||
1876 | dst_hold(dst); | ||
1877 | sk->sk_rx_dst = dst; | ||
1878 | inet_sk(sk)->rx_dst_ifindex = skb->skb_iif; | ||
1879 | } | ||
1880 | EXPORT_SYMBOL(inet_sk_rx_dst_set); | ||
1881 | |||
1875 | const struct inet_connection_sock_af_ops ipv4_specific = { | 1882 | const struct inet_connection_sock_af_ops ipv4_specific = { |
1876 | .queue_xmit = ip_queue_xmit, | 1883 | .queue_xmit = ip_queue_xmit, |
1877 | .send_check = tcp_v4_send_check, | 1884 | .send_check = tcp_v4_send_check, |
1878 | .rebuild_header = inet_sk_rebuild_header, | 1885 | .rebuild_header = inet_sk_rebuild_header, |
1886 | .sk_rx_dst_set = inet_sk_rx_dst_set, | ||
1879 | .conn_request = tcp_v4_conn_request, | 1887 | .conn_request = tcp_v4_conn_request, |
1880 | .syn_recv_sock = tcp_v4_syn_recv_sock, | 1888 | .syn_recv_sock = tcp_v4_syn_recv_sock, |
1881 | .net_header_len = sizeof(struct iphdr), | 1889 | .net_header_len = sizeof(struct iphdr), |