|
@@ -2096,6 +2096,7 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
|
|
{
|
|
{
|
|
const struct net_device_ops *ops = dev->netdev_ops;
|
|
const struct net_device_ops *ops = dev->netdev_ops;
|
|
int rc = NETDEV_TX_OK;
|
|
int rc = NETDEV_TX_OK;
|
|
|
|
+ unsigned int skb_len;
|
|
|
|
|
|
if (likely(!skb->next)) {
|
|
if (likely(!skb->next)) {
|
|
u32 features;
|
|
u32 features;
|
|
@@ -2146,8 +2147,9 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ skb_len = skb->len;
|
|
rc = ops->ndo_start_xmit(skb, dev);
|
|
rc = ops->ndo_start_xmit(skb, dev);
|
|
- trace_net_dev_xmit(skb, rc);
|
|
|
|
|
|
+ trace_net_dev_xmit(skb, rc, dev, skb_len);
|
|
if (rc == NETDEV_TX_OK)
|
|
if (rc == NETDEV_TX_OK)
|
|
txq_trans_update(txq);
|
|
txq_trans_update(txq);
|
|
return rc;
|
|
return rc;
|
|
@@ -2167,8 +2169,9 @@ gso:
|
|
if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
|
|
if (dev->priv_flags & IFF_XMIT_DST_RELEASE)
|
|
skb_dst_drop(nskb);
|
|
skb_dst_drop(nskb);
|
|
|
|
|
|
|
|
+ skb_len = nskb->len;
|
|
rc = ops->ndo_start_xmit(nskb, dev);
|
|
rc = ops->ndo_start_xmit(nskb, dev);
|
|
- trace_net_dev_xmit(nskb, rc);
|
|
|
|
|
|
+ trace_net_dev_xmit(nskb, rc, dev, skb_len);
|
|
if (unlikely(rc != NETDEV_TX_OK)) {
|
|
if (unlikely(rc != NETDEV_TX_OK)) {
|
|
if (rc & ~NETDEV_TX_MASK)
|
|
if (rc & ~NETDEV_TX_MASK)
|
|
goto out_kfree_gso_skb;
|
|
goto out_kfree_gso_skb;
|