Herbert Xu
48d83325b6
[NET]: Prevent multiple qdisc runs
...
Having two or more qdisc_run's contend against each other is bad because
it can induce packet reordering if the packets have to be requeued. It
appears that this is an unintended consequence of relinquinshing the queue
lock while transmitting. That in turn is needed for devices that spend a
lot of time in their transmit routine.
There are no advantages to be had as devices with queues are inherently
single-threaded (the loopback device is not but then it doesn't have a
queue).
Even if you were to add a queue to a parallel virtual device (e.g., bolt
a tbf filter in front of an ipip tunnel device), you would still want to
process the queue in sequence to ensure that the packets are ordered
correctly.
The solution here is to steal a bit from net_device to prevent this.
BTW, as qdisc_restart is no longer used by anyone as a module inside the
kernel (IIRC it used to with netif_wake_queue), I have not exported the
new __qdisc_run function.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
2006-06-19 23:57:59 -07:00
..
act_api.c
[NET_SCHED]: act_api: fix skb leak in error path
2006-03-12 20:39:36 -08:00
act_gact.c
[PKT_SCHED]: Prefix tc actions with act_
2006-01-09 14:16:14 -08:00
act_ipt.c
[NETFILTER]: ipt action: use xt_check_target for basic verification
2006-04-24 17:27:34 -07:00
act_mirred.c
[PKT_SCHED]: Prefix tc actions with act_
2006-01-09 14:16:14 -08:00
act_pedit.c
[PKT_SCHED]: Prefix tc actions with act_
2006-01-09 14:16:14 -08:00
act_police.c
[PKT_SCHED] act_police: Rename methods.
2006-04-09 22:25:46 -07:00
act_simple.c
[PKT_SCHED]: Prefix tc actions with act_
2006-01-09 14:16:14 -08:00
cls_api.c
[NETLINK]: Convert netlink users to use group numbers instead of bitmasks
2005-08-29 16:00:54 -07:00
cls_basic.c
[PKT_SCHED]: Dump classification result for basic classifier
2005-06-08 15:11:02 -07:00
cls_fw.c
[NET]: kfree cleanup
2005-11-08 09:41:34 -08:00
cls_route.c
[NET]: kfree cleanup
2005-11-08 09:41:34 -08:00
cls_rsvp.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
cls_rsvp.h
[NET]: kfree cleanup
2005-11-08 09:41:34 -08:00
cls_rsvp6.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
cls_tcindex.c
[NET]: kfree cleanup
2005-11-08 09:41:34 -08:00
cls_u32.c
[NET_SCHED]: cls_u32: remove unnecessary NULL-ptr check
2006-03-23 01:16:48 -08:00
em_cmp.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
em_meta.c
[NET]: kfree cleanup
2005-11-08 09:41:34 -08:00
em_nbyte.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
em_text.c
[PKT_SCHED]: Remove debugging leftover from textsearch ematch
2005-07-18 13:29:49 -07:00
em_u32.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
ematch.c
[PKT_SCHED] ematch: Remove bogus include.
2006-01-11 16:32:16 -08:00
estimator.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
Kconfig
[PKT_SCHED]: Let NET_CLS_ACT no longer depend on EXPERIMENTAL
2006-03-20 22:44:24 -08:00
Makefile
[PKT_SCHED]: Prefix tc actions with act_
2006-01-09 14:16:14 -08:00
sch_api.c
[PATCH] timer initialization cleanup: DEFINE_TIMER
2005-09-09 14:03:48 -07:00
sch_atm.c
[PKT_SCHED]: Dump child qdisc handle in sch_{atm,dsmark}
2006-03-20 19:01:06 -08:00
sch_blackhole.c
[PKT_SCHED]: Blackhole queueing discipline
2005-07-05 15:29:16 -07:00
sch_cbq.c
[PKT_SCHED]: Fix qdisc return code.
2006-01-09 14:16:26 -08:00
sch_dsmark.c
[PKT_SCHED]: Dump child qdisc handle in sch_{atm,dsmark}
2006-03-20 19:01:06 -08:00
sch_fifo.c
[PKT_SCHED]: Cleanup fifo qdisc and remove unnecessary code
2005-06-18 22:58:00 -07:00
sch_generic.c
[NET]: Prevent multiple qdisc runs
2006-06-19 23:57:59 -07:00
sch_gred.c
[PKT_SCHED]: (G)RED: Introduce hard dropping
2005-11-05 22:02:29 +01:00
sch_hfsc.c
[NET_SCHED]: HFSC: fix thinko in hfsc_adjust_levels()
2006-05-11 12:22:03 -07:00
sch_htb.c
[PKT_SCHED]: Fix qdisc return code.
2006-01-09 14:16:26 -08:00
sch_ingress.c
Linux-2.6.12-rc2
2005-04-16 15:20:36 -07:00
sch_netem.c
[PKT_SCHED] netem: fix loss
2006-04-29 18:33:12 -07:00
sch_prio.c
[PKT_SCHED]: Qdisc drop operation is optional
2006-03-20 19:00:49 -08:00
sch_red.c
[PKT_SCHED]: Convert sch_red to a classful qdisc
2006-03-20 19:20:44 -08:00
sch_sfq.c
[PKT_SCHED]: Keep backlog counter in sch_sfq
2006-03-20 19:01:38 -08:00
sch_tbf.c
[PKT_SCHED]: Restore TBF change semantic
2006-03-20 19:01:21 -08:00
sch_teql.c
[NET]: Add netif_tx_lock
2006-06-17 21:30:14 -07:00