[PATCH] mv643xx_eth: Fix transmit skb accounting
authorDale Farnsworth <dale@farnsworth.org>
Mon, 16 Jan 2006 23:58:24 +0000 (16:58 -0700)
committerJeff Garzik <jgarzik@pobox.com>
Tue, 17 Jan 2006 12:23:38 +0000 (07:23 -0500)
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>
drivers/net/mv643xx_eth.c

index 615b3622ea67d07b39049a38f2261f74ce2ceb5c..5de06d714ab0f3cfa4e7fab59ffd30edef48502d 100644 (file)
@@ -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--;
                }
        }