diff options
Diffstat (limited to 'net/ipv4/tcp_cong.c')
| -rw-r--r-- | net/ipv4/tcp_cong.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index 7a5ae50c80c8..84be008c945c 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c | |||
| @@ -187,6 +187,7 @@ static void tcp_reinit_congestion_control(struct sock *sk, | |||
| 187 | 187 | ||
| 188 | tcp_cleanup_congestion_control(sk); | 188 | tcp_cleanup_congestion_control(sk); |
| 189 | icsk->icsk_ca_ops = ca; | 189 | icsk->icsk_ca_ops = ca; |
| 190 | icsk->icsk_ca_setsockopt = 1; | ||
| 190 | 191 | ||
| 191 | if (sk->sk_state != TCP_CLOSE && icsk->icsk_ca_ops->init) | 192 | if (sk->sk_state != TCP_CLOSE && icsk->icsk_ca_ops->init) |
| 192 | icsk->icsk_ca_ops->init(sk); | 193 | icsk->icsk_ca_ops->init(sk); |
| @@ -335,8 +336,10 @@ int tcp_set_congestion_control(struct sock *sk, const char *name) | |||
| 335 | rcu_read_lock(); | 336 | rcu_read_lock(); |
| 336 | ca = __tcp_ca_find_autoload(name); | 337 | ca = __tcp_ca_find_autoload(name); |
| 337 | /* No change asking for existing value */ | 338 | /* No change asking for existing value */ |
| 338 | if (ca == icsk->icsk_ca_ops) | 339 | if (ca == icsk->icsk_ca_ops) { |
| 340 | icsk->icsk_ca_setsockopt = 1; | ||
| 339 | goto out; | 341 | goto out; |
| 342 | } | ||
| 340 | if (!ca) | 343 | if (!ca) |
| 341 | err = -ENOENT; | 344 | err = -ENOENT; |
| 342 | else if (!((ca->flags & TCP_CONG_NON_RESTRICTED) || | 345 | else if (!((ca->flags & TCP_CONG_NON_RESTRICTED) || |
