net: tcp: refactor reinitialization of congestion control
authorDaniel Borkmann <dborkman@redhat.com>
Mon, 5 Jan 2015 22:57:45 +0000 (23:57 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 6 Jan 2015 03:55:24 +0000 (22:55 -0500)
We can just move this to an extra function and make the code
a bit more readable, no functional change.

Joint work with Florian Westphal.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_cong.c

index 27ead0dd16bc7e444e96781ff01b10c444678396..38f2f8aa4ceba3ecbaefc21581f2668aea891a03 100644 (file)
@@ -107,6 +107,18 @@ void tcp_init_congestion_control(struct sock *sk)
                icsk->icsk_ca_ops->init(sk);
 }
 
+static void tcp_reinit_congestion_control(struct sock *sk,
+                                         const struct tcp_congestion_ops *ca)
+{
+       struct inet_connection_sock *icsk = inet_csk(sk);
+
+       tcp_cleanup_congestion_control(sk);
+       icsk->icsk_ca_ops = ca;
+
+       if (sk->sk_state != TCP_CLOSE && icsk->icsk_ca_ops->init)
+               icsk->icsk_ca_ops->init(sk);
+}
+
 /* Manage refcounts on socket close. */
 void tcp_cleanup_congestion_control(struct sock *sk)
 {
@@ -262,21 +274,13 @@ int tcp_set_congestion_control(struct sock *sk, const char *name)
 #endif
        if (!ca)
                err = -ENOENT;
-
        else if (!((ca->flags & TCP_CONG_NON_RESTRICTED) ||
                   ns_capable(sock_net(sk)->user_ns, CAP_NET_ADMIN)))
                err = -EPERM;
-
        else if (!try_module_get(ca->owner))
                err = -EBUSY;
-
-       else {
-               tcp_cleanup_congestion_control(sk);
-               icsk->icsk_ca_ops = ca;
-
-               if (sk->sk_state != TCP_CLOSE && icsk->icsk_ca_ops->init)
-                       icsk->icsk_ca_ops->init(sk);
-       }
+       else
+               tcp_reinit_congestion_control(sk, ca);
  out:
        rcu_read_unlock();
        return err;