Commit bb39b743 authored by David L Stevens's avatar David L Stevens Committed by David S. Miller
Browse files

sunvnet: failed trigger should not cause BUG_ON()



An error return from __vnet_tx_trigger() sets the TX descriptor to
VIO_DESC_FREE while leaving port->tx_bufs[txi].skb set. This leads
to a BUG_ON() the next time this descriptor is used.

This patch frees the pending skb when getting a trigger error to
match the VIO_DESC_FREE state.
Signed-off-by: default avatarDavid L Stevens <david.stevens@oracle.com>
Acked-by: default avatarSowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 950ddcb1
...@@ -1411,6 +1411,8 @@ static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -1411,6 +1411,8 @@ static int vnet_start_xmit(struct sk_buff *skb, struct net_device *dev)
if (unlikely(err < 0)) { if (unlikely(err < 0)) {
netdev_info(dev, "TX trigger error %d\n", err); netdev_info(dev, "TX trigger error %d\n", err);
d->hdr.state = VIO_DESC_FREE; d->hdr.state = VIO_DESC_FREE;
skb = port->tx_bufs[txi].skb;
port->tx_bufs[txi].skb = NULL;
dev->stats.tx_carrier_errors++; dev->stats.tx_carrier_errors++;
goto out_dropped; goto out_dropped;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment