--- a/net/sched/bak.sch_generic.c 2004-12-19 13:46:19.799356432 -0500 +++ b/net/sched/sch_generic.c 2004-12-19 13:49:14.384815408 -0500 @@ -128,12 +128,11 @@ } /* Remember that the driver is grabbed by us. */ dev->xmit_lock_owner = smp_processor_id(); + /* And release queue */ + spin_unlock(&dev->queue_lock); } { - /* And release queue */ - spin_unlock(&dev->queue_lock); - if (!netif_queue_stopped(dev)) { int ret; if (netdev_nit) @@ -141,15 +140,14 @@ ret = dev->hard_start_xmit(skb, dev); if (ret == NETDEV_TX_OK) { + dev->xmit_lock_owner = -1; if (!nolock) { - dev->xmit_lock_owner = -1; spin_unlock(&dev->xmit_lock); } spin_lock(&dev->queue_lock); return -1; } if (ret == NETDEV_TX_LOCKED && nolock) { - spin_lock(&dev->queue_lock); goto collision; } }