Merge tag 'linux-kselftest-4.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel...
[cascardo/linux.git] / net / ipv4 / tcp_cong.c
index 93c4dc3..882caa4 100644 (file)
@@ -173,6 +173,10 @@ out:
         */
        if (ca->get_info)
                memset(icsk->icsk_ca_priv, 0, sizeof(icsk->icsk_ca_priv));
+       if (ca->flags & TCP_CONG_NEEDS_ECN)
+               INET_ECN_xmit(sk);
+       else
+               INET_ECN_dontxmit(sk);
 }
 
 void tcp_init_congestion_control(struct sock *sk)
@@ -181,6 +185,10 @@ void tcp_init_congestion_control(struct sock *sk)
 
        if (icsk->icsk_ca_ops->init)
                icsk->icsk_ca_ops->init(sk);
+       if (tcp_ca_needs_ecn(sk))
+               INET_ECN_xmit(sk);
+       else
+               INET_ECN_dontxmit(sk);
 }
 
 static void tcp_reinit_congestion_control(struct sock *sk,
@@ -192,8 +200,8 @@ static void tcp_reinit_congestion_control(struct sock *sk,
        icsk->icsk_ca_ops = ca;
        icsk->icsk_ca_setsockopt = 1;
 
-       if (sk->sk_state != TCP_CLOSE && icsk->icsk_ca_ops->init)
-               icsk->icsk_ca_ops->init(sk);
+       if (sk->sk_state != TCP_CLOSE)
+               tcp_init_congestion_control(sk);
 }
 
 /* Manage refcounts on socket close. */