linux-stable/net/sched
David S. Miller 8a34c5dc3a pkt_sched: Perform bulk of qdisc destruction in RCU.
This allows less strict control of access to the qdisc attached to a
netdev_queue.  It is even allowed to enqueue into a qdisc which is
in the process of being destroyed.  The RCU handler will toss out
those packets.

We will need this to handle sharing of a qdisc amongst multiple
TX queues.  In such a setup the lock has to be shared, so will
be inside of the qdisc itself.  At which point the netdev_queue
lock cannot be used to hard synchronize access to the ->qdisc
pointer.

One operation we have to keep inside of qdisc_destroy() is the list
deletion.  It is the only piece of state visible after the RCU quiesce
period, so we have to undo it early and under the appropriate locking.

The operations in the RCU handler do not need any looking because the
qdisc tree is no longer visible to anything at that point.

Signed-off-by: David S. Miller <davem@davemloft.net>
2008-07-17 19:21:22 -07:00
..
act_api.c [NET] NETNS: Omit sock->sk_net without CONFIG_NET_NS. 2008-03-26 04:39:55 +09:00
act_gact.c [NET_SCHED]: Use nla_policy for attribute validation in actions 2008-01-28 15:11:23 -08:00
act_ipt.c [NET_SCHED]: Use nla_policy for attribute validation in actions 2008-01-28 15:11:23 -08:00
act_mirred.c [NET_SCHED]: Use nla_policy for attribute validation in actions 2008-01-28 15:11:23 -08:00
act_nat.c [NET_SCHED]: Use nla_policy for attribute validation in actions 2008-01-28 15:11:23 -08:00
act_pedit.c [NET_SCHED]: Use nla_policy for attribute validation in actions 2008-01-28 15:11:23 -08:00
act_police.c [NET_SCHED]: Use nla_policy for attribute validation in actions 2008-01-28 15:11:23 -08:00
act_simple.c net_cls_act: act_simple dont ignore realloc code 2008-05-06 00:10:24 -07:00
cls_api.c netdev: Allocate multiple queues for TX. 2008-07-17 19:21:00 -07:00
cls_basic.c [NET_SCHED]: Constify struct tcf_ext_map 2008-01-31 19:28:34 -08:00
cls_flow.c net-sched: cls_flow: add perturbation support 2008-07-14 20:36:32 -07:00
cls_fw.c [NET_SCHED]: Constify struct tcf_ext_map 2008-01-31 19:28:34 -08:00
cls_route.c pkt_sched: Remove 'dev' member of struct Qdisc. 2008-07-08 17:06:30 -07:00
cls_rsvp.c [NET_SCHED]: Remove unnecessary includes 2007-07-10 22:16:41 -07:00
cls_rsvp.h [NET_SCHED]: Use nla_policy for attribute validation in classifiers 2008-01-28 15:11:23 -08:00
cls_rsvp6.c [NET_SCHED]: Remove unnecessary includes 2007-07-10 22:16:41 -07:00
cls_tcindex.c [NET_SCHED]: Constify struct tcf_ext_map 2008-01-31 19:28:34 -08:00
cls_u32.c [NET_SCHED] cls_u32: refcounting fix for u32_delete() 2008-04-12 18:37:13 -07:00
em_cmp.c [NET_SCHED]: ematch: module autoloading 2007-07-11 19:46:26 -07:00
em_meta.c [IPV4]: Add 'rtable' field in struct sk_buff to alias 'dst' and avoid casts 2008-03-05 18:30:47 -08:00
em_nbyte.c [NET_SCHED]: ematch: module autoloading 2007-07-11 19:46:26 -07:00
em_text.c [NET_SCHED]: Convert classifiers from rtnetlink to new netlink API 2008-01-28 15:11:11 -08:00
em_u32.c [PKT_SCHED]: annotate cls_u32 2008-03-17 22:46:46 -07:00
ematch.c [PKT_SCHED] ematch: Fix build warning. 2008-02-10 03:48:15 -08:00
Kconfig pkt_sched: Remove CONFIG_NET_SCH_RR 2008-06-27 19:54:05 -07:00
Makefile [NET_SCHED]: Add flow classifier 2008-01-31 19:28:36 -08:00
sch_api.c pkt_sched: Schedule qdiscs instead of netdev_queue. 2008-07-17 19:21:20 -07:00
sch_atm.c pkt_sched: Remove 'dev' member of struct Qdisc. 2008-07-08 17:06:30 -07:00
sch_blackhole.c [NET]: Move Qdisc_class_ops and Qdisc_ops in appropriate sections. 2008-01-28 14:53:58 -08:00
sch_cbq.c pkt_sched: Schedule qdiscs instead of netdev_queue. 2008-07-17 19:21:20 -07:00
sch_dsmark.c pkt_sched: Remove 'dev' member of struct Qdisc. 2008-07-08 17:06:30 -07:00
sch_fifo.c pkt_sched: Remove 'dev' member of struct Qdisc. 2008-07-08 17:06:30 -07:00
sch_generic.c pkt_sched: Perform bulk of qdisc destruction in RCU. 2008-07-17 19:21:22 -07:00
sch_gred.c pkt_sched: Remove 'dev' member of struct Qdisc. 2008-07-08 17:06:30 -07:00
sch_hfsc.c pkt_sched: Add and use qdisc_root() and qdisc_root_lock(). 2008-07-17 19:21:19 -07:00
sch_htb.c pkt_sched: Add and use qdisc_root() and qdisc_root_lock(). 2008-07-17 19:21:19 -07:00
sch_ingress.c net-sched: change tcf_destroy_chain() to clear start of filter list 2008-07-01 19:52:38 -07:00
sch_netem.c pkt_sched: Add and use qdisc_root() and qdisc_root_lock(). 2008-07-17 19:21:19 -07:00
sch_prio.c pkt_sched: Remove RR scheduler. 2008-07-17 19:21:04 -07:00
sch_red.c net-sched: consolidate default fifo qdisc setup 2008-07-05 23:40:21 -07:00
sch_sfq.c pkt_sched: Remove 'dev' member of struct Qdisc. 2008-07-08 17:06:30 -07:00
sch_tbf.c net-sched: consolidate default fifo qdisc setup 2008-07-05 23:40:21 -07:00
sch_teql.c net: Use queue aware tests throughout. 2008-07-17 19:21:07 -07:00