[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1370207755.24311.81.camel@edumazet-glaptop>
Date: Sun, 02 Jun 2013 14:15:55 -0700
From: Eric Dumazet <eric.dumazet@...il.com>
To: Jesper Dangaard Brouer <brouer@...hat.com>
Cc: Stephen Hemminger <stephen@...workplumber.org>,
David Miller <davem@...hat.com>, j.vimal@...il.com,
Michal Soltys <soltys@....info>,
Mike Frysinger <vapier@...too.org>,
Jussi Kivilinna <jussi.kivilinna@...et.fi>,
Patrick McHardy <kaber@...sh.net>,
Jiri Pirko <jpirko@...hat.com>,
Toke Høiland-Jørgensen <toke@...e.dk>,
Dave Taht <dave.taht@...il.com>, netdev@...r.kernel.org,
bloat@...ts.bufferbloat.net, Dan Siemon <dan@...erfire.com>,
Jim Gettys <jg@...edesktop.org>,
Steven Barth <cyrus@...nwrt.org>, Felix Fietkau <nbd@....name>,
Jiri Benc <jbenc@...hat.com>
Subject: Re: tc linklayer ADSL calc broken after commit 56b765b79 (htb:
improved accuracy at high rates)
On Wed, 2013-05-29 at 15:13 +0200, Jesper Dangaard Brouer wrote:
> I recently discovered that the (traffic control) tc linklayer
> calculations for ATM/ADSL have been broken by:
> commit 56b765b79 (htb: improved accuracy at high rates).
>
> Thus, people shaping on ADSL links, using e.g.:
> tc class add ... htb rate X ceil Y linklayer atm overhead 10
>
It seems the "overhead 10" was never reported back by
"tc -s class show dev ... "
Also, the "linklayer atm" changes the data[] part, and this one is not
matched in qdisc_get_rtab()
So two different rate specifications, but sharing same struct
tc_ratespec could be shared... Oh well.
It seems following fix would be needed anyway ?
[PATCH] net_sched: qdisc_get_rtab() must check data[] array
qdisc_get_rtab() should check not only the keys in struct tc_ratespec,
but also the full data[] array.
"tc ... linklayer atm " only perturbs values in the 256 slots array.
Signed-off-by: Eric Dumazet <edumazet@...gle.com>
---
net/sched/sch_api.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/net/sched/sch_api.c b/net/sched/sch_api.c
index 2b935e7..281c1bd 100644
--- a/net/sched/sch_api.c
+++ b/net/sched/sch_api.c
@@ -291,17 +291,18 @@ struct qdisc_rate_table *qdisc_get_rtab(struct tc_ratespec *r, struct nlattr *ta
{
struct qdisc_rate_table *rtab;
+ if (tab == NULL || r->rate == 0 || r->cell_log == 0 ||
+ nla_len(tab) != TC_RTAB_SIZE)
+ return NULL;
+
for (rtab = qdisc_rtab_list; rtab; rtab = rtab->next) {
- if (memcmp(&rtab->rate, r, sizeof(struct tc_ratespec)) == 0) {
+ if (!memcmp(&rtab->rate, r, sizeof(struct tc_ratespec)) &&
+ !memcmp(&rtab->data, nla_data(tab), 1024)) {
rtab->refcnt++;
return rtab;
}
}
- if (tab == NULL || r->rate == 0 || r->cell_log == 0 ||
- nla_len(tab) != TC_RTAB_SIZE)
- return NULL;
-
rtab = kmalloc(sizeof(*rtab), GFP_KERNEL);
if (rtab) {
rtab->rate = *r;
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists