pkt_sched: sch_generic: Fix oops in sch_teql
Subsystems (3)
PATCH 1/1 pkt_sched: sch_generic: Fix oops in sch_teql
pkt_sched: sch_generic: Fix oops in sch_teql
After these commands:
# modprobe sch_teql # tc qdisc add dev eth0 root teql0 # tc qdisc del dev eth0 root we get an oops in teql_destroy() when spin_lock is taken from a null qdisc_sleeping pointer. It's because at the moment teql0 dev haven't been activated yet, and a qdisc_root_sleeping() is pointing to noop qdisc's netdev_queue with qdisc_sleeping uninitialized. This patch fixes this both for noop and noqueue netdev_queues to avoid similar problems in the future.
Signed-off-by Jarek Poplawski <[email protected]>
[regression in 2.6.27]
---
net/sched/sch_generic.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
net/sched/sch_generic.c +2 -0
@@ -326,6 +326,7 @@ struct Qdisc_ops noop_qdisc_ops __read_mostly = {static struct netdev_queue noop_netdev_queue = { .qdisc = &noop_qdisc, + .qdisc_sleeping = &noop_qdisc, };struct Qdisc noop_qdisc = {
@@ -352,6 +353,7 @@ static struct Qdisc_ops noqueue_qdisc_ops __read_mostly = {static struct Qdisc noqueue_qdisc;static struct netdev_queue noqueue_netdev_queue = { .qdisc = &noqueue_qdisc, + .qdisc_sleeping = &noqueue_qdisc, };static struct Qdisc noqueue_qdisc = {
David Miller
maintainerFrom: Jarek Poplawski <[email protected]>
Date: Sun, 19 Oct 2008 01:09:38 +0200
Quoted 13 lines
pkt_sched:sch_generic: Fix oops insch_teqlAfter these commands:
# modprobe sch_teql # tc qdisc add dev eth0 root teql0 # tc qdisc del dev eth0 root we get an oops in teql_destroy() when spin_lock is taken from a null qdisc_sleeping pointer. It's because at the moment teql0 dev haven't been activated yet, and a qdisc_root_sleeping() is pointing to noop qdisc's netdev_queue with qdisc_sleeping uninitialized. This patch fixes this both for noop and noqueue netdev_queues to avoid similar problems in the future.
Quoted 2 lines
Signed-off-by Jarek Poplawski <[email protected]>[regression in 2.6.27]
Applied and will queue to -stable, thanks Jarek.