diff options
author | Eric Dumazet <eric.dumazet@gmail.com> | 2012-01-03 00:00:11 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-01-03 13:03:20 -0500 |
commit | fa0f5aa74316c636427ac92dad0bc5714c34ca17 (patch) | |
tree | 64fcb6a7f4043cdaea4a13b730a1ca651190e314 /kernel | |
parent | d32ae76f2b776347051cf821ebe690602e38dfc7 (diff) |
net_sched: qdisc_alloc_handle() can be too slow
When trying to allocate ~32768 qdiscs using autohandle mechanism, we can
fill the space managed by kernel (handles in [8000-FFFF]:0000 range)
But O(N^2) qdisc_alloc_handle() loops 0x10000 times instead of 0x8000
time tc add qdisc add dev eth0 parent 10:7fff pfifo limit 10
RTNETLINK answers: Cannot allocate memory
real 1m54.826s
user 0m0.000s
sys 0m0.004s
INFO: rcu_sched_state detected stall on CPU 0 (t=60000 jiffies)
Half number of loops, and add a cond_resched() call.
We hold rtnl at this point.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
CC: Dave Taht <dave.taht@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'kernel')
0 files changed, 0 insertions, 0 deletions