mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-27 00:51:35 +00:00
tcp: make undo_cwnd mandatory for congestion modules
The undo_cwnd fallback in the stack doubles cwnd based on ssthresh, which un-does reno halving behaviour. It seems more appropriate to let congctl algorithms pair .ssthresh and .undo_cwnd properly. Add a 'tcp_reno_undo_cwnd' function and wire it up for all congestion algorithms that used to rely on the fallback. Cc: Eric Dumazet <edumazet@google.com> Cc: Yuchung Cheng <ycheng@google.com> Cc: Neal Cardwell <ncardwell@google.com> Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
85f7e7508a
commit
e97991832a
8 changed files with 19 additions and 6 deletions
|
@ -68,8 +68,9 @@ int tcp_register_congestion_control(struct tcp_congestion_ops *ca)
|
|||
{
|
||||
int ret = 0;
|
||||
|
||||
/* all algorithms must implement ssthresh and cong_avoid ops */
|
||||
if (!ca->ssthresh || !(ca->cong_avoid || ca->cong_control)) {
|
||||
/* all algorithms must implement these */
|
||||
if (!ca->ssthresh || !ca->undo_cwnd ||
|
||||
!(ca->cong_avoid || ca->cong_control)) {
|
||||
pr_err("%s does not implement required ops\n", ca->name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -441,10 +442,19 @@ u32 tcp_reno_ssthresh(struct sock *sk)
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(tcp_reno_ssthresh);
|
||||
|
||||
u32 tcp_reno_undo_cwnd(struct sock *sk)
|
||||
{
|
||||
const struct tcp_sock *tp = tcp_sk(sk);
|
||||
|
||||
return max(tp->snd_cwnd, tp->snd_ssthresh << 1);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(tcp_reno_undo_cwnd);
|
||||
|
||||
struct tcp_congestion_ops tcp_reno = {
|
||||
.flags = TCP_CONG_NON_RESTRICTED,
|
||||
.name = "reno",
|
||||
.owner = THIS_MODULE,
|
||||
.ssthresh = tcp_reno_ssthresh,
|
||||
.cong_avoid = tcp_reno_cong_avoid,
|
||||
.undo_cwnd = tcp_reno_undo_cwnd,
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue