--- linux-2.6.2-rc1/drivers/net/r8169.c.orig 2004-01-22 00:41:03.000000000 +0100 +++ linux-2.6.2-rc1/drivers/net/r8169.c 2004-01-22 00:46:46.000000000 +0100 @@ -871,7 +871,6 @@ rtl8169_tx_interrupt(struct net_device * void *ioaddr) { unsigned long dirty_tx, tx_left = 0; - int entry = tp->cur_tx % NUM_TX_DESC; assert(dev != NULL); assert(tp != NULL); @@ -881,14 +880,14 @@ rtl8169_tx_interrupt(struct net_device * tx_left = tp->cur_tx - dirty_tx; while (tx_left > 0) { + int entry = dirty_tx % NUM_TX_DESC; + if ((tp->TxDescArray[entry].status & OWNbit) == 0) { - dev_kfree_skb_irq(tp-> - Tx_skbuff[dirty_tx % NUM_TX_DESC]); - tp->Tx_skbuff[dirty_tx % NUM_TX_DESC] = NULL; + dev_kfree_skb_irq(tp->Tx_skbuff[entry]); + tp->Tx_skbuff[entry] = NULL; tp->stats.tx_packets++; dirty_tx++; tx_left--; - entry++; } }