diff --git a/[refs] b/[refs] index 01b2e27a9b7e..7b50bdc311a0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 2e77d89b2fa8e3f8325b8ce7893ec3645f41aff5 +refs/heads/master: a21bba945430f3f5e00c349665f88cdacdb32a8d diff --git a/trunk/net/ipv4/ip_output.c b/trunk/net/ipv4/ip_output.c index 5516825a0751..8ebe86dd72af 100644 --- a/trunk/net/ipv4/ip_output.c +++ b/trunk/net/ipv4/ip_output.c @@ -1284,7 +1284,12 @@ int ip_push_pending_frames(struct sock *sk) skb->priority = sk->sk_priority; skb->mark = sk->sk_mark; - skb->dst = dst_clone(&rt->u.dst); + /* + * Steal rt from cork.dst to avoid a pair of atomic_inc/atomic_dec + * on dst refcount + */ + inet->cork.dst = NULL; + skb->dst = &rt->u.dst; if (iph->protocol == IPPROTO_ICMP) icmp_out_count(net, ((struct icmphdr *)