]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
tcp: Link sk and twsk to tb2->owners using skc_bind_node.
authorKuniyuki Iwashima <kuniyu@amazon.com>
Tue, 19 Dec 2023 00:18:32 +0000 (09:18 +0900)
committerDavid S. Miller <davem@davemloft.net>
Fri, 22 Dec 2023 22:15:35 +0000 (22:15 +0000)
Now we can use sk_bind_node/tw_bind_node for bhash2, which means
we need not link TIME_WAIT sockets separately.

The dead code and sk_bind2_node will be removed in the next patch.

Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/sock.h
net/ipv4/inet_connection_sock.c
net/ipv4/inet_diag.c
net/ipv4/inet_hashtables.c
net/ipv4/inet_timewait_sock.c

index ba6642811db4e94233f0fa39d3c9e81e51369687..21c86e4c71fcbcdc0d6374e93d57f44ed4250792 100644 (file)
@@ -873,16 +873,6 @@ static inline void sk_add_bind_node(struct sock *sk,
        hlist_add_head(&sk->sk_bind_node, list);
 }
 
-static inline void __sk_del_bind2_node(struct sock *sk)
-{
-       __hlist_del(&sk->sk_bind2_node);
-}
-
-static inline void sk_add_bind2_node(struct sock *sk, struct hlist_head *list)
-{
-       hlist_add_head(&sk->sk_bind2_node, list);
-}
-
 #define sk_for_each(__sk, list) \
        hlist_for_each_entry(__sk, list, sk_node)
 #define sk_for_each_rcu(__sk, list) \
index 1bd13dcd45ae614a984c8784c11f9d30cd5444b6..1e19f85bce20438c0f1f664a55248e4d2f7625f8 100644 (file)
@@ -219,7 +219,7 @@ static bool inet_bhash2_conflict(const struct sock *sk,
        struct inet_timewait_sock *tw2;
        struct sock *sk2;
 
-       sk_for_each_bound_bhash2(sk2, &tb2->owners) {
+       sk_for_each_bound(sk2, &tb2->owners) {
                if (__inet_bhash2_conflict(sk, sk2, sk_uid, relax,
                                           reuseport_cb_ok, reuseport_ok))
                        return true;
@@ -238,7 +238,7 @@ static bool inet_bhash2_conflict(const struct sock *sk,
 
 #define sk_for_each_bound_bhash(__sk, __tb2, __tb)                     \
        hlist_for_each_entry(__tb2, &(__tb)->bhash2, bhash_node)        \
-               sk_for_each_bound_bhash2(sk2, &(__tb2)->owners)
+               sk_for_each_bound(sk2, &(__tb2)->owners)
 
 #define twsk_for_each_bound_bhash(__sk, __tb2, __tb)                   \
        hlist_for_each_entry(__tb2, &(__tb)->bhash2, bhash_node)        \
index 46b13962ad02f22e263c8f403b7ec2fe269a0a45..8e6b6aa0579e1c94def819a1f9eab8b946771ba7 100644 (file)
@@ -1104,7 +1104,7 @@ resume_bind_walk:
                                if (!net_eq(ib2_net(tb2), net))
                                        continue;
 
-                               sk_for_each_bound_bhash2(sk, &tb2->owners) {
+                               sk_for_each_bound(sk, &tb2->owners) {
                                        struct inet_sock *inet = inet_sk(sk);
 
                                        if (num < s_num)
index 5c3ad37624f1b2820f76161fd5f21472bca5d7f9..4ca726a71b9d59f91195ee5ead45bf994326f092 100644 (file)
@@ -169,8 +169,8 @@ void inet_bind_hash(struct sock *sk, struct inet_bind_bucket *tb,
 {
        inet_sk(sk)->inet_num = port;
        inet_csk(sk)->icsk_bind_hash = tb;
-       sk_add_bind2_node(sk, &tb2->owners);
        inet_csk(sk)->icsk_bind2_hash = tb2;
+       sk_add_bind_node(sk, &tb2->owners);
 }
 
 /*
@@ -197,7 +197,7 @@ static void __inet_put_port(struct sock *sk)
        if (inet_csk(sk)->icsk_bind2_hash) {
                struct inet_bind2_bucket *tb2 = inet_csk(sk)->icsk_bind2_hash;
 
-               __sk_del_bind2_node(sk);
+               __sk_del_bind_node(sk);
                inet_csk(sk)->icsk_bind2_hash = NULL;
                inet_bind2_bucket_destroy(hashinfo->bind2_bucket_cachep, tb2);
        }
@@ -937,7 +937,7 @@ static int __inet_bhash2_update_saddr(struct sock *sk, void *saddr, int family,
        spin_lock_bh(&head->lock);
 
        spin_lock(&head2->lock);
-       __sk_del_bind2_node(sk);
+       __sk_del_bind_node(sk);
        inet_bind2_bucket_destroy(hinfo->bind2_bucket_cachep, inet_csk(sk)->icsk_bind2_hash);
        spin_unlock(&head2->lock);
 
@@ -954,8 +954,8 @@ static int __inet_bhash2_update_saddr(struct sock *sk, void *saddr, int family,
                tb2 = new_tb2;
                inet_bind2_bucket_init(tb2, net, head2, inet_csk(sk)->icsk_bind_hash, sk);
        }
-       sk_add_bind2_node(sk, &tb2->owners);
        inet_csk(sk)->icsk_bind2_hash = tb2;
+       sk_add_bind_node(sk, &tb2->owners);
        spin_unlock(&head2->lock);
 
        spin_unlock_bh(&head->lock);
index 547583a87bd3a65f48de3fc035a143653275d2ff..5befa4de5b2416281ad2795713a70d0fd847b0b2 100644 (file)
@@ -35,9 +35,8 @@ void inet_twsk_bind_unhash(struct inet_timewait_sock *tw,
        if (!tb)
                return;
 
+       __sk_del_bind_node((struct sock *)tw);
        tw->tw_tb = NULL;
-
-       __hlist_del(&tw->tw_bind2_node);
        tw->tw_tb2 = NULL;
        inet_bind2_bucket_destroy(hashinfo->bind2_bucket_cachep, tb2);
        inet_bind_bucket_destroy(hashinfo->bind_bucket_cachep, tb);
@@ -93,12 +92,6 @@ static void inet_twsk_add_node_rcu(struct inet_timewait_sock *tw,
        hlist_nulls_add_head_rcu(&tw->tw_node, list);
 }
 
-static void inet_twsk_add_bind2_node(struct inet_timewait_sock *tw,
-                                    struct hlist_head *list)
-{
-       hlist_add_head(&tw->tw_bind2_node, list);
-}
-
 /*
  * Enter the time wait state. This is called with locally disabled BH.
  * Essentially we whip up a timewait bucket, copy the relevant info into it
@@ -129,7 +122,7 @@ void inet_twsk_hashdance(struct inet_timewait_sock *tw, struct sock *sk,
 
        tw->tw_tb2 = icsk->icsk_bind2_hash;
        WARN_ON(!icsk->icsk_bind2_hash);
-       inet_twsk_add_bind2_node(tw, &tw->tw_tb2->deathrow);
+       sk_add_bind_node((struct sock *)tw, &tw->tw_tb2->owners);
 
        spin_unlock(&bhead2->lock);
        spin_unlock(&bhead->lock);