]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/ipv6/ip6_output.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[karo-tx-linux.git] / net / ipv6 / ip6_output.c
index e164684456df830c411781810f80e8e7c176d636..d0f51b420447cd09a0bf786e8ba79b063226f305 100644 (file)
@@ -119,7 +119,8 @@ static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *
        if (unlikely(!neigh))
                neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false);
        if (!IS_ERR(neigh)) {
-               ret = dst_neigh_output(dst, neigh, skb);
+               sock_confirm_neigh(skb, neigh);
+               ret = neigh_output(neigh, skb);
                rcu_read_unlock_bh();
                return ret;
        }
@@ -1147,6 +1148,9 @@ static inline int ip6_ufo_append_data(struct sock *sk,
                skb->protocol = htons(ETH_P_IPV6);
                skb->csum = 0;
 
+               if (flags & MSG_CONFIRM)
+                       skb_set_dst_pending_confirm(skb, 1);
+
                __skb_queue_tail(queue, skb);
        } else if (skb_is_gso(skb)) {
                goto append;
@@ -1519,6 +1523,9 @@ alloc_new_skb:
                        exthdrlen = 0;
                        dst_exthdrlen = 0;
 
+                       if ((flags & MSG_CONFIRM) && !skb_prev)
+                               skb_set_dst_pending_confirm(skb, 1);
+
                        /*
                         * Put the packet on the pending queue
                         */