+ if (debug > 6)
+ printk(KERN_DEBUG "Tx scavenge %d status %8.8x.\n",
+ entry, txstatus);
+- if (txstatus & DescOwn)
++ if (txstatus & DescOwn) {
++ spin_unlock(&rp->lock);
+ break;
++ }
+ if (txstatus & 0x8000) {
+ if (debug > 1)
+ printk(KERN_DEBUG "%s: Transmit error, "
+@@ -1443,6 +1472,7 @@
+ (txstatus & 0x0800) || (txstatus & 0x1000)) {
+ rp->stats.tx_fifo_errors++;
+ rp->tx_ring[entry].tx_status = cpu_to_le32(DescOwn);
++ spin_unlock(&rp->lock);
+ break; /* Keep the skb - we try again */
+ }
+ /* Transmitter restarted in 'abnormal' handler. */
+@@ -1457,6 +1487,7 @@