From: Dale Farnsworth Date: Mon, 16 Jan 2006 23:58:24 +0000 (-0700) Subject: [PATCH] mv643xx_eth: Fix transmit skb accounting X-Git-Tag: v2.6.16-rc2~366^2~58 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4476e0e4c7e6a2c22288391b853b6e071622f079;p=linux-2.6 [PATCH] mv643xx_eth: Fix transmit skb accounting Signed-off-by: Dale Farnsworth mv643xx_eth.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) Signed-off-by: Jeff Garzik --- diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c index 615b3622ea..5de06d714a 100644 --- a/drivers/net/mv643xx_eth.c +++ b/drivers/net/mv643xx_eth.c @@ -889,14 +889,17 @@ static void mv643xx_eth_free_tx_rings(struct net_device *dev) struct mv643xx_private *mp = netdev_priv(dev); unsigned int port_num = mp->port_num; unsigned int curr; + struct sk_buff *skb; /* Stop Tx Queues */ mv_write(MV643XX_ETH_TRANSMIT_QUEUE_COMMAND_REG(port_num), 0x0000ff00); /* Free outstanding skb's on TX rings */ for (curr = 0; mp->tx_ring_skbs && curr < mp->tx_ring_size; curr++) { - if (mp->tx_skb[curr]) { - dev_kfree_skb(mp->tx_skb[curr]); + skb = mp->tx_skb[curr]; + if (skb) { + mp->tx_ring_skbs -= skb_shinfo(skb)->nr_frags; + dev_kfree_skb(skb); mp->tx_ring_skbs--; } }