--- 261-mod/net/sched/sch_generic.c 2004/02/14 13:10:43 1.1 +++ 261-mod/net/sched/sch_generic.c 2004/02/14 13:42:18 @@ -448,22 +448,17 @@ if (dev->qdisc_sleeping == &noop_qdisc) { struct Qdisc *qdisc; - if (dev->tx_queue_len) { - qdisc = qdisc_create_dflt(dev, &pfifo_fast_ops); - if (qdisc == NULL) { - printk(KERN_INFO "%s: activation failed\n", dev->name); - return; - } - - write_lock(&qdisc_tree_lock); - qdisc->next = dev->qdisc_list; - dev->qdisc_list = qdisc; - write_unlock(&qdisc_tree_lock); - - } else { - qdisc = &noqueue_qdisc; + if (!dev->tx_queue_len) + dev->tx_queue_len = 1; + qdisc = qdisc_create_dflt(dev, &pfifo_fast_ops); + if (qdisc == NULL) { + printk(KERN_INFO "%s: activation failed\n", dev->name); + return; } + write_lock(&qdisc_tree_lock); + qdisc->next = dev->qdisc_list; + dev->qdisc_list = qdisc; dev->qdisc_sleeping = qdisc; write_unlock(&qdisc_tree_lock); } @@ -489,6 +484,8 @@ spin_unlock_bh(&dev->queue_lock); dev_watchdog_down(dev); + if (dev->tx_queue_len == 1) + dev->tx_queue_len = 0; while (test_bit(__LINK_STATE_SCHED, &dev->state)) yield();