tcp: Remove dead code and fields for bhash2.
authorKuniyuki Iwashima <kuniyu@amazon.com>
Tue, 19 Dec 2023 00:18:33 +0000 (09:18 +0900)
committerDavid S. Miller <davem@davemloft.net>
Fri, 22 Dec 2023 22:15:35 +0000 (22:15 +0000)
Now all sockets including TIME_WAIT are linked to bhash2 using
sock_common.skc_bind_node.

We no longer use inet_bind2_bucket.deathrow, sock.sk_bind2_node,
and inet_timewait_sock.tw_bind2_node.

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/inet_hashtables.h
include/net/inet_timewait_sock.h
include/net/sock.h
net/ipv4/inet_connection_sock.c
net/ipv4/inet_hashtables.c

index 98ba728aec0854229a2e2b1b219f2f660b710583..7f1b384587437d06834bde554edd8df983fd64a4 100644 (file)
@@ -107,10 +107,6 @@ struct inet_bind2_bucket {
        struct hlist_node       bhash_node;
        /* List of sockets hashed to this bucket */
        struct hlist_head       owners;
-       /* bhash has twsk in owners, but bhash2 has twsk in
-        * deathrow not to add a member in struct sock_common.
-        */
-       struct hlist_head       deathrow;
 };
 
 static inline struct net *ib_net(const struct inet_bind_bucket *ib)
index b14999ff55db1be505f371be48c26ff946062e83..f28da08a37b4e97f366279be47192019c901ed47 100644 (file)
@@ -75,13 +75,9 @@ struct inet_timewait_sock {
        struct timer_list       tw_timer;
        struct inet_bind_bucket *tw_tb;
        struct inet_bind2_bucket        *tw_tb2;
-       struct hlist_node               tw_bind2_node;
 };
 #define tw_tclass tw_tos
 
-#define twsk_for_each_bound_bhash2(__tw, list) \
-       hlist_for_each_entry(__tw, list, tw_bind2_node)
-
 static inline struct inet_timewait_sock *inet_twsk(const struct sock *sk)
 {
        return (struct inet_timewait_sock *)sk;
index 21c86e4c71fcbcdc0d6374e93d57f44ed4250792..2fb3ea2d2ec311fa24d1157a8799eab66e115f9e 100644 (file)
@@ -352,7 +352,6 @@ struct sk_filter;
   *    @sk_txtime_report_errors: set report errors mode for SO_TXTIME
   *    @sk_txtime_unused: unused txtime flags
   *    @ns_tracker: tracker for netns reference
-  *    @sk_bind2_node: bind node in the bhash2 table
   */
 struct sock {
        /*
@@ -544,7 +543,6 @@ struct sock {
 #endif
        struct rcu_head         sk_rcu;
        netns_tracker           ns_tracker;
-       struct hlist_node       sk_bind2_node;
 };
 
 enum sk_pacing {
@@ -890,8 +888,6 @@ static inline void sk_add_bind_node(struct sock *sk,
        hlist_for_each_entry_safe(__sk, tmp, list, sk_node)
 #define sk_for_each_bound(__sk, list) \
        hlist_for_each_entry(__sk, list, sk_bind_node)
-#define sk_for_each_bound_bhash2(__sk, list) \
-       hlist_for_each_entry(__sk, list, sk_bind2_node)
 
 /**
  * sk_for_each_entry_offset_rcu - iterate over a list at a given struct offset
index 1e19f85bce20438c0f1f664a55248e4d2f7625f8..8e2eb1793685ecd72da75bc841af12b90e85fcc7 100644 (file)
@@ -216,7 +216,6 @@ static bool inet_bhash2_conflict(const struct sock *sk,
                                 bool relax, bool reuseport_cb_ok,
                                 bool reuseport_ok)
 {
-       struct inet_timewait_sock *tw2;
        struct sock *sk2;
 
        sk_for_each_bound(sk2, &tb2->owners) {
@@ -225,14 +224,6 @@ static bool inet_bhash2_conflict(const struct sock *sk,
                        return true;
        }
 
-       twsk_for_each_bound_bhash2(tw2, &tb2->deathrow) {
-               sk2 = (struct sock *)tw2;
-
-               if (__inet_bhash2_conflict(sk, sk2, sk_uid, relax,
-                                          reuseport_cb_ok, reuseport_ok))
-                       return true;
-       }
-
        return false;
 }
 
@@ -240,10 +231,6 @@ static bool inet_bhash2_conflict(const struct sock *sk,
        hlist_for_each_entry(__tb2, &(__tb)->bhash2, bhash_node)        \
                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)        \
-               sk_for_each_bound_bhash2(sk2, &(__tb2)->deathrow)
-
 /* This should be called only when the tb and tb2 hashbuckets' locks are held */
 static int inet_csk_bind_conflict(const struct sock *sk,
                                  const struct inet_bind_bucket *tb,
@@ -283,14 +270,6 @@ static int inet_csk_bind_conflict(const struct sock *sk,
                        return true;
        }
 
-       twsk_for_each_bound_bhash(sk2, tb2, tb) {
-               if (!inet_bind_conflict(sk, sk2, uid, relax, reuseport_cb_ok, reuseport_ok))
-                       continue;
-
-               if (inet_rcv_saddr_equal(sk, sk2, true))
-                       return true;
-       }
-
        return false;
 }
 
index 4ca726a71b9d59f91195ee5ead45bf994326f092..93e9193df54461b25c61089bd5db4dd33c32dab6 100644 (file)
@@ -122,7 +122,6 @@ static void inet_bind2_bucket_init(struct inet_bind2_bucket *tb2,
        tb2->rcv_saddr = sk->sk_rcv_saddr;
 #endif
        INIT_HLIST_HEAD(&tb2->owners);
-       INIT_HLIST_HEAD(&tb2->deathrow);
        hlist_add_head(&tb2->node, &head->chain);
        hlist_add_head(&tb2->bhash_node, &tb->bhash2);
 }
@@ -144,7 +143,7 @@ struct inet_bind2_bucket *inet_bind2_bucket_create(struct kmem_cache *cachep,
 /* Caller must hold hashbucket lock for this tb with local BH disabled */
 void inet_bind2_bucket_destroy(struct kmem_cache *cachep, struct inet_bind2_bucket *tb)
 {
-       if (hlist_empty(&tb->owners) && hlist_empty(&tb->deathrow)) {
+       if (hlist_empty(&tb->owners)) {
                __hlist_del(&tb->node);
                __hlist_del(&tb->bhash_node);
                kmem_cache_free(cachep, tb);