• Paolo Valente's avatar
    sched: add missing group change to qfq_change_class · be72f63b
    Paolo Valente authored
    [Resending again, as the text was corrupted by the email client]
    
    To speed up operations, QFQ internally divides classes into
    groups. Which group a class belongs to depends on the ratio between
    the maximum packet length and the weight of the class. Unfortunately
    the function qfq_change_class lacks the steps for changing the group
    of a class when the ratio max_pkt_len/weight of the class changes.
    
    For example, when the last of the following three commands is
    executed, the group of class 1:1 is not correctly changed:
    
    tc disc add dev XXX root handle 1: qfq
    tc class add dev XXX parent 1: qfq classid 1:1 weight 1
    tc class change dev XXX parent 1: classid 1:1 qfq weight 4
    
    Not changing the group of a class does not affect the long-term
    bandwidth guaranteed to the class, as the latter is independent of the
    maximum packet length, and correctly changes (only) if the weight of
    the class changes. In contrast, if the group of the class is not
    updated, the class is still guaranteed the short-term bandwidth and
    packet delay related to its old group, instead of the guarantees that
    it should receive according to its new weight and/or maximum packet
    length. This may also break service guarantees for other classes.
    This patch adds the missing operations.
    Signed-off-by: default avatarPaolo Valente <paolo.valente@unimore.it>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    be72f63b
sch_qfq.c 28.3 KB