diff --git a/sch_cake.c b/sch_cake.c index c97a212..91e556c 100644 --- a/sch_cake.c +++ b/sch_cake.c @@ -854,10 +854,11 @@ static void cake_set_rate(struct cake_tin_data *b, u64 rate, u32 mtu, byte_target_ns = (byte_target * rate_ns) >> rate_shft; - b->cparams.target = max(byte_target_ns, ns_target); b->cparams.interval = max(rtt_est_ns + b->cparams.target - ns_target, b->cparams.target * 8); + b->cparams.target = max(max(byte_target_ns, ns_target), + b->cparams.interval >> 4); b->cparams.threshold = (b->cparams.target >> 15) * (b->cparams.interval >> 15) * 2; @@ -1144,7 +1145,7 @@ static void cake_reconfigure(struct Qdisc *sch) q->peel_threshold = 0; } - q->buffer_limit = min(q->buffer_limit, sch->limit * + q->buffer_limit = max(q->buffer_limit, sch->limit * psched_mtu(qdisc_dev(sch))); }