pkt_sched: Fix OOPS on ingress qdisc add.
authorDavid S. Miller <davem@davemloft.net>
Wed, 30 Jul 2008 09:37:46 +0000 (02:37 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 30 Jul 2008 09:44:25 +0000 (02:44 -0700)
commit8d50b53d66a8a6ae41bafbdcabe401467803f33a
tree7a23efd740161b5b32d3fd473cf024e1a8931ce1
parent38c080ffa9c1b840390832b42ce8621464ab9f97
pkt_sched: Fix OOPS on ingress qdisc add.

Bug report from Steven Jan Springl:

Issuing the following command causes a kernel oops:
tc qdisc add dev eth0 handle ffff: ingress

The problem mostly stems from all of the special case handling of
ingress qdiscs.

So, to fix this, do the grafting operation the same way we do for TX
qdiscs.  Which means that dev_activate() and dev_deactivate() now do
the "qdisc_sleeping <--> qdisc" transitions on dev->rx_queue too.

Future simplifications are possible now, mainly because it is
impossible for dev_queue->{qdisc,qdisc_sleeping} to be NULL.  There
are NULL checks all over to handle the ingress qdisc special case
that used to exist before this commit.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c
net/sched/sch_api.c
net/sched/sch_generic.c