|
|
@@ -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 @@ tpacket_error:
|
|
|
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)
|