2
0
mirror of https://github.com/edk2-porting/linux-next.git synced 2024-12-20 11:13:58 +08:00

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: David L Stevens <david.stevens@oracle.com>
Acked-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David L Stevens 2015-02-19 13:15:49 -05:00 committed by David S. Miller
parent 950ddcb1c1
commit bb39b7433d

View File

@ -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;
} }