summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDale Farnsworth <dale@farnsworth.org>2006-01-16 16:58:24 -0700
committerJeff Garzik <jgarzik@pobox.com>2006-01-17 07:23:38 -0500
commit4476e0e4c7e6a2c22288391b853b6e071622f079 (patch)
treee51ce4e1b1b50ea539ff179ccff3a4fffceae7bb /drivers
parent63890576a3bfd5c6aea86fb72236682480865bc0 (diff)
downloadlinux-4476e0e4c7e6a2c22288391b853b6e071622f079.tar.bz2
[PATCH] mv643xx_eth: Fix transmit skb accounting
Signed-off-by: Dale Farnsworth <dale@farnsworth.org> mv643xx_eth.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/mv643xx_eth.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/mv643xx_eth.c b/drivers/net/mv643xx_eth.c
index 615b3622ea67..5de06d714ab0 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--;
}
}