• Jarek Poplawski's avatar
    [NET_SCHED] sch_api: fix qdisc_tree_decrease_qlen() loop · 066a3b5b
    Jarek Poplawski authored
    TC_H_MAJ(parentid) for root classes is the same as for ingress, and if
    ingress qdisc is created qdisc_lookup() returns its pointer (without
    ingress NULL is returned). After this all qdisc_lookups give the same,
    and we get endless loop. (I don't know how this could hide for so long
    - it should trigger with every leaf class deleted if it's qdisc isn't
    empty.)
    
    After this fix qdisc_lookup() is omitted both for ingress and root
    parents, but looking for root is only wasting a little time here...
    Many thanks to Enrico Demarin for finding a test for catching this
    bug, which probably bothered quite a lot of admins.
     
    Reported-by: Enrico Demarin <enrico@superclick.com>,
    Signed-off-by: default avatarJarek Poplawski <jarkao2@gmail.com>
    Acked-by: default avatarPatrick McHardy <kaber@trash.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    066a3b5b
sch_api.c 30 KB