• Eric Dumazet's avatar
    net_sched: qdisc_alloc_handle() can be too slow · fa0f5aa7
    Eric Dumazet authored
    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: default avatarEric Dumazet <eric.dumazet@gmail.com>
    CC: Dave Taht <dave.taht@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fa0f5aa7
sch_api.c 41.1 KB