linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / net / sched / sch_teql.c
index 4c16ad5..79b8ef3 100644 (file)
@@ -302,17 +302,20 @@ restart:
 
                switch (teql_resolve(skb, skb_res, slave)) {
                case 0:
-                       if (netif_tx_trylock(slave)) {
+                       if (spin_trylock(&slave->xmit_lock)) {
+                               slave->xmit_lock_owner = smp_processor_id();
                                if (!netif_queue_stopped(slave) &&
                                    slave->hard_start_xmit(skb, slave) == 0) {
-                                       netif_tx_unlock(slave);
+                                       slave->xmit_lock_owner = -1;
+                                       spin_unlock(&slave->xmit_lock);
                                        master->slaves = NEXT_SLAVE(q);
                                        netif_wake_queue(dev);
                                        master->stats.tx_packets++;
                                        master->stats.tx_bytes += len;
                                        return 0;
                                }
-                               netif_tx_unlock(slave);
+                               slave->xmit_lock_owner = -1;
+                               spin_unlock(&slave->xmit_lock);
                        }
                        if (netif_queue_stopped(dev))
                                busy = 1;