]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/tipc/udp_media.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[karo-tx-linux.git] / net / tipc / udp_media.c
index cd7c5f131e72203138ff6e77c5c0637effbe4025..ad2719ad4c1baf38cd8e31b244fe703382da002a 100644 (file)
@@ -156,14 +156,12 @@ static int tipc_udp_send_msg(struct net *net, struct sk_buff *skb,
        struct udp_bearer *ub;
        struct udp_media_addr *dst = (struct udp_media_addr *)&dest->value;
        struct udp_media_addr *src = (struct udp_media_addr *)&b->addr.value;
-       struct sk_buff *clone;
        struct rtable *rt;
 
        if (skb_headroom(skb) < UDP_MIN_HEADROOM)
                pskb_expand_head(skb, UDP_MIN_HEADROOM, 0, GFP_ATOMIC);
 
-       clone = skb_clone(skb, GFP_ATOMIC);
-       skb_set_inner_protocol(clone, htons(ETH_P_TIPC));
+       skb_set_inner_protocol(skb, htons(ETH_P_TIPC));
        ub = rcu_dereference_rtnl(b->media_ptr);
        if (!ub) {
                err = -ENODEV;
@@ -173,7 +171,7 @@ static int tipc_udp_send_msg(struct net *net, struct sk_buff *skb,
                struct flowi4 fl = {
                        .daddr = dst->ipv4.s_addr,
                        .saddr = src->ipv4.s_addr,
-                       .flowi4_mark = clone->mark,
+                       .flowi4_mark = skb->mark,
                        .flowi4_proto = IPPROTO_UDP
                };
                rt = ip_route_output_key(net, &fl);
@@ -182,7 +180,7 @@ static int tipc_udp_send_msg(struct net *net, struct sk_buff *skb,
                        goto tx_error;
                }
                ttl = ip4_dst_hoplimit(&rt->dst);
-               err = udp_tunnel_xmit_skb(rt, ub->ubsock->sk, clone,
+               err = udp_tunnel_xmit_skb(rt, ub->ubsock->sk, skb,
                                          src->ipv4.s_addr,
                                          dst->ipv4.s_addr, 0, ttl, 0,
                                          src->udp_port, dst->udp_port,
@@ -205,7 +203,7 @@ static int tipc_udp_send_msg(struct net *net, struct sk_buff *skb,
                if (err)
                        goto tx_error;
                ttl = ip6_dst_hoplimit(ndst);
-               err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, clone,
+               err = udp_tunnel6_xmit_skb(ndst, ub->ubsock->sk, skb,
                                           ndst->dev, &src->ipv6,
                                           &dst->ipv6, 0, ttl, src->udp_port,
                                           dst->udp_port, false);
@@ -214,7 +212,7 @@ static int tipc_udp_send_msg(struct net *net, struct sk_buff *skb,
        return err;
 
 tx_error:
-       kfree_skb(clone);
+       kfree_skb(skb);
        return err;
 }
 
@@ -435,7 +433,6 @@ static void tipc_udp_disable(struct tipc_bearer *b)
        }
        if (ub->ubsock)
                sock_set_flag(ub->ubsock->sk, SOCK_DEAD);
-       RCU_INIT_POINTER(b->media_ptr, NULL);
        RCU_INIT_POINTER(ub->bearer, NULL);
 
        /* sock_release need to be done outside of rtnl lock */