mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
net_sched: gred: fix qave reporting via netlink
q->vars.qavg is a Wlog scaled value, but q->backlog is not. In order to pass q->vars.qavg as the backlog value, we need to un-scale it. Additionally, the qave value returned via netlink should not be Wlog scaled, so we need to un-scale the result of red_calc_qavg(). This caused artificially high values for "Average Queue" to be shown by 'tc -s -d qdisc', but did not affect the actual operation of GRED. Signed-off-by: David Ward <david.ward@ll.mit.edu> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c22e464022
commit
1fe37b106b
@ -534,6 +534,7 @@ static int gred_dump(struct Qdisc *sch, struct sk_buff *skb)
|
||||
for (i = 0; i < MAX_DPs; i++) {
|
||||
struct gred_sched_data *q = table->tab[i];
|
||||
struct tc_gred_qopt opt;
|
||||
unsigned long qavg;
|
||||
|
||||
memset(&opt, 0, sizeof(opt));
|
||||
|
||||
@ -565,7 +566,9 @@ static int gred_dump(struct Qdisc *sch, struct sk_buff *skb)
|
||||
if (gred_wred_mode(table))
|
||||
gred_load_wred_set(table, q);
|
||||
|
||||
opt.qave = red_calc_qavg(&q->parms, &q->vars, q->vars.qavg);
|
||||
qavg = red_calc_qavg(&q->parms, &q->vars,
|
||||
q->vars.qavg >> q->parms.Wlog);
|
||||
opt.qave = qavg >> q->parms.Wlog;
|
||||
|
||||
append_opt:
|
||||
if (nla_append(skb, sizeof(opt), &opt) < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user