diff options
Diffstat (limited to 'net/sched/sch_htb.c')
| -rw-r--r-- | net/sched/sch_htb.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/net/sched/sch_htb.c b/net/sched/sch_htb.c index 0e1e38b40025..717b2108f852 100644 --- a/net/sched/sch_htb.c +++ b/net/sched/sch_htb.c | |||
| @@ -1477,11 +1477,22 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, | |||
| 1477 | sch_tree_lock(sch); | 1477 | sch_tree_lock(sch); |
| 1478 | } | 1478 | } |
| 1479 | 1479 | ||
| 1480 | rate64 = tb[TCA_HTB_RATE64] ? nla_get_u64(tb[TCA_HTB_RATE64]) : 0; | ||
| 1481 | |||
| 1482 | ceil64 = tb[TCA_HTB_CEIL64] ? nla_get_u64(tb[TCA_HTB_CEIL64]) : 0; | ||
| 1483 | |||
| 1484 | psched_ratecfg_precompute(&cl->rate, &hopt->rate, rate64); | ||
| 1485 | psched_ratecfg_precompute(&cl->ceil, &hopt->ceil, ceil64); | ||
| 1486 | |||
| 1480 | /* it used to be a nasty bug here, we have to check that node | 1487 | /* it used to be a nasty bug here, we have to check that node |
| 1481 | * is really leaf before changing cl->un.leaf ! | 1488 | * is really leaf before changing cl->un.leaf ! |
| 1482 | */ | 1489 | */ |
| 1483 | if (!cl->level) { | 1490 | if (!cl->level) { |
| 1484 | cl->quantum = hopt->rate.rate / q->rate2quantum; | 1491 | u64 quantum = cl->rate.rate_bytes_ps; |
| 1492 | |||
| 1493 | do_div(quantum, q->rate2quantum); | ||
| 1494 | cl->quantum = min_t(u64, quantum, INT_MAX); | ||
| 1495 | |||
| 1485 | if (!hopt->quantum && cl->quantum < 1000) { | 1496 | if (!hopt->quantum && cl->quantum < 1000) { |
| 1486 | pr_warning( | 1497 | pr_warning( |
| 1487 | "HTB: quantum of class %X is small. Consider r2q change.\n", | 1498 | "HTB: quantum of class %X is small. Consider r2q change.\n", |
| @@ -1500,13 +1511,6 @@ static int htb_change_class(struct Qdisc *sch, u32 classid, | |||
| 1500 | cl->prio = TC_HTB_NUMPRIO - 1; | 1511 | cl->prio = TC_HTB_NUMPRIO - 1; |
| 1501 | } | 1512 | } |
| 1502 | 1513 | ||
| 1503 | rate64 = tb[TCA_HTB_RATE64] ? nla_get_u64(tb[TCA_HTB_RATE64]) : 0; | ||
| 1504 | |||
| 1505 | ceil64 = tb[TCA_HTB_CEIL64] ? nla_get_u64(tb[TCA_HTB_CEIL64]) : 0; | ||
| 1506 | |||
| 1507 | psched_ratecfg_precompute(&cl->rate, &hopt->rate, rate64); | ||
| 1508 | psched_ratecfg_precompute(&cl->ceil, &hopt->ceil, ceil64); | ||
| 1509 | |||
| 1510 | cl->buffer = PSCHED_TICKS2NS(hopt->buffer); | 1514 | cl->buffer = PSCHED_TICKS2NS(hopt->buffer); |
| 1511 | cl->cbuffer = PSCHED_TICKS2NS(hopt->cbuffer); | 1515 | cl->cbuffer = PSCHED_TICKS2NS(hopt->cbuffer); |
| 1512 | 1516 | ||
