diff options
author | Vasily Averin <vvs@parallels.com> | 2014-08-14 12:27:47 +0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-08-19 10:58:44 -0700 |
commit | 73d0f37ac4ee5b60e6b9c1b3ccb8766bade9d9c5 (patch) | |
tree | adaf72c8208c62eed0d4e6a74983cb8f6741ab03 /block | |
parent | ac32c7f705692b92fe12dcbe88fe87136fdfff6f (diff) | |
download | linux-73d0f37ac4ee5b60e6b9c1b3ccb8766bade9d9c5.tar.bz2 |
cbq: incorrectly low bandwidth setting blocks limited traffic
Mainstream commit f0f6ee1f70c4 ("cbq: incorrect processing of high limits")
have side effect: if cbq bandwidth setting is less than real interface
throughput non-limited traffic can delay limited traffic for a very long time.
This happen because of q->now changes incorrectly in cbq_dequeue():
in described scenario L2T is much greater than real time delay,
and q->now gets an extra boost for each transmitted packet.
Accumulated boost prevents update q->now, and blocked class can wait
very long time until (q->now >= cl->undertime) will be true again.
To fix the problem the patch updates q->now on each cbq_update() call.
L2T-related pre-modification q->now was moved to cbq_update().
My testing confirmed that it fixes the problem and did not discover
any side-effects
Fixes: f0f6ee1f70c4 ("cbq: incorrect processing of high limits")
Signed-off-by: Vasily Averin <vvs@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'block')
0 files changed, 0 insertions, 0 deletions