Eric Dumazet fa0f5aa743 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>
2012-01-03 13:03:20 -05:00
..
2011-12-14 13:34:55 -05:00
2011-09-15 14:49:43 -04:00
2011-01-19 23:31:12 -08:00
2011-01-19 23:31:12 -08:00
2011-01-19 23:31:12 -08:00
2011-01-19 23:31:12 -08:00
2011-01-19 23:31:12 -08:00
2011-03-03 11:10:02 -08:00
2011-03-31 11:26:23 -03:00
2011-12-30 17:12:23 -05:00
2012-01-03 13:02:19 -05:00
2011-11-28 19:09:28 -05:00
2011-12-29 15:07:21 -05:00