• E
    sch_sfq: avoid giving spurious NET_XMIT_CN signals · 8efa8854
    Eric Dumazet 提交于
    While chasing a possible net_sched bug, I found that IP fragments have
    litle chance to pass a congestioned SFQ qdisc :
    
    - Say SFQ qdisc is full because one flow is non responsive.
    - ip_fragment() wants to send two fragments belonging to an idle flow.
    - sfq_enqueue() queues first packet, but see queue limit reached :
    - sfq_enqueue() drops one packet from 'big consumer', and returns
    NET_XMIT_CN.
    - ip_fragment() cancel remaining fragments.
    
    This patch restores fairness, making sure we return NET_XMIT_CN only if
    we dropped a packet from the same flow.
    Signed-off-by: NEric Dumazet <eric.dumazet@gmail.com>
    CC: Patrick McHardy <kaber@trash.net>
    CC: Jarek Poplawski <jarkao2@gmail.com>
    CC: Jamal Hadi Salim <hadi@cyberus.ca>
    CC: Stephen Hemminger <shemminger@vyatta.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    8efa8854
sch_sfq.c 17.0 KB