• Yang Yingliang's avatar
    net: sched: tbf: fix the calculation of max_size · cc106e44
    Yang Yingliang authored
    
    
    Current max_size is caluated from rate table. Now, the rate table
    has been replaced and it's wrong to caculate max_size based on this
    rate table. It can lead wrong calculation of max_size.
    
    The burst in kernel may be lower than user asked, because burst may gets
    some loss when transform it to buffer(E.g. "burst 40kb rate 30mbit/s")
    and it seems we cannot avoid this loss. Burst's value(max_size) based on
    rate table may be equal user asked. If a packet's length is max_size, this
    packet will be stalled in tbf_dequeue() because its length is above the
    burst in kernel so that it cannot get enough tokens. The max_size guards
    against enqueuing packet sizes above q->buffer "time" in tbf_enqueue().
    
    To make consistent with the calculation of tokens, this patch add a helper
    psched_ns_t2l() to calculate burst(max_size) directly to fix this problem.
    
    After this fix, we can support to using 64bit rates to calculate burst as well.
    Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    cc106e44
sch_tbf.c 13.5 KB