]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/packet/af_packet.c
Merge tag 'uuid-for-4.13-2' of git://git.infradead.org/users/hch/uuid
[linux.git] / net / packet / af_packet.c
index e3beb28203ebe06a4192ff80d4d0eb3b3741cf41..008bb34ee3240495ecb0ed65bf55d5edd20e1186 100644 (file)
@@ -214,6 +214,7 @@ static void prb_clear_rxhash(struct tpacket_kbdq_core *,
 static void prb_fill_vlan_info(struct tpacket_kbdq_core *,
                struct tpacket3_hdr *);
 static void packet_flush_mclist(struct sock *sk);
+static void packet_pick_tx_queue(struct net_device *dev, struct sk_buff *skb);
 
 struct packet_skb_cb {
        union {
@@ -260,6 +261,7 @@ static int packet_direct_xmit(struct sk_buff *skb)
        if (skb != orig_skb)
                goto drop;
 
+       packet_pick_tx_queue(dev, skb);
        txq = skb_get_tx_queue(dev, skb);
 
        local_bh_disable();
@@ -2747,8 +2749,6 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)
                        goto tpacket_error;
                }
 
-               packet_pick_tx_queue(dev, skb);
-
                skb->destructor = tpacket_destruct_skb;
                __packet_set_status(po, ph, TP_STATUS_SENDING);
                packet_inc_pending(&po->tx_ring);
@@ -2931,8 +2931,6 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)
        skb->priority = sk->sk_priority;
        skb->mark = sockc.mark;
 
-       packet_pick_tx_queue(dev, skb);
-
        if (po->has_vnet_hdr) {
                err = virtio_net_hdr_to_skb(skb, &vnet_hdr, vio_le());
                if (err)