OSDN Git Service

inet: minor optimization for backlog setting in listen(2)
authorYafang Shao <laoar.shao@gmail.com>
Wed, 7 Nov 2018 11:20:16 +0000 (19:20 +0800)
committerDavid S. Miller <davem@davemloft.net>
Thu, 8 Nov 2018 06:31:07 +0000 (22:31 -0800)
Set the backlog earlier in inet_dccp_listen() and inet_listen(),
then we can avoid the redundant setting.

Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dccp/proto.c
net/ipv4/af_inet.c
net/ipv4/inet_connection_sock.c

index 43733ac..658cd32 100644 (file)
@@ -948,6 +948,7 @@ int inet_dccp_listen(struct socket *sock, int backlog)
        if (!((1 << old_state) & (DCCPF_CLOSED | DCCPF_LISTEN)))
                goto out;
 
+       sk->sk_max_ack_backlog = backlog;
        /* Really, if the socket is already in listen state
         * we can only allow the backlog to be adjusted.
         */
@@ -960,7 +961,6 @@ int inet_dccp_listen(struct socket *sock, int backlog)
                if (err)
                        goto out;
        }
-       sk->sk_max_ack_backlog = backlog;
        err = 0;
 
 out:
index 07749c5..326c422 100644 (file)
@@ -208,6 +208,7 @@ int inet_listen(struct socket *sock, int backlog)
        if (!((1 << old_state) & (TCPF_CLOSE | TCPF_LISTEN)))
                goto out;
 
+       sk->sk_max_ack_backlog = backlog;
        /* Really, if the socket is already in listen state
         * we can only allow the backlog to be adjusted.
         */
@@ -231,7 +232,6 @@ int inet_listen(struct socket *sock, int backlog)
                        goto out;
                tcp_call_bpf(sk, BPF_SOCK_OPS_TCP_LISTEN_CB, 0, NULL);
        }
-       sk->sk_max_ack_backlog = backlog;
        err = 0;
 
 out:
index 5c63449..6ea523d 100644 (file)
@@ -881,7 +881,6 @@ int inet_csk_listen_start(struct sock *sk, int backlog)
 
        reqsk_queue_alloc(&icsk->icsk_accept_queue);
 
-       sk->sk_max_ack_backlog = backlog;
        sk->sk_ack_backlog = 0;
        inet_csk_delack_init(sk);