]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
r8169: do not account fragments as packets
authorStanislaw Gruszka <sgruszka@redhat.com>
Wed, 20 Oct 2010 22:25:40 +0000 (22:25 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 21 Oct 2010 08:32:46 +0000 (01:32 -0700)
Only increase tx_{packets,dropped} statistics when transmit or drop
full skb, not just fragment.

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/r8169.c

index c36f6426430058d8ff2bd202001a54575feac362..a8be98cad57978ca4f8154aeb91d6946d94566ba 100644 (file)
@@ -4094,10 +4094,10 @@ static void rtl8169_tx_clear_range(struct rtl8169_private *tp, u32 start,
                        rtl8169_unmap_tx_skb(&tp->pci_dev->dev, tx_skb,
                                             tp->TxDescArray + entry);
                        if (skb) {
+                               tp->dev->stats.tx_dropped++;
                                dev_kfree_skb(skb);
                                tx_skb->skb = NULL;
                        }
-                       tp->dev->stats.tx_dropped++;
                }
        }
 }
@@ -4402,7 +4402,6 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
        while (tx_left > 0) {
                unsigned int entry = dirty_tx % NUM_TX_DESC;
                struct ring_info *tx_skb = tp->tx_skb + entry;
-               u32 len = tx_skb->len;
                u32 status;
 
                rmb();
@@ -4410,12 +4409,11 @@ static void rtl8169_tx_interrupt(struct net_device *dev,
                if (status & DescOwn)
                        break;
 
-               dev->stats.tx_bytes += len;
-               dev->stats.tx_packets++;
-
                rtl8169_unmap_tx_skb(&tp->pci_dev->dev, tx_skb,
                                     tp->TxDescArray + entry);
                if (status & LastFrag) {
+                       dev->stats.tx_packets++;
+                       dev->stats.tx_bytes += tx_skb->skb->len;
                        dev_kfree_skb(tx_skb->skb);
                        tx_skb->skb = NULL;
                }