Hi David,

        Last one for tonight, tomorrow I'll continue the series.

rsync://rsync.kernel.org/pub/scm/linux/kernel/git/acme/net-2.6.14.git

                        - Arnaldo

tree d149bde0e2bfd088aca778493f251167612298f4
parent e9ce33a100ac5f276db9eeed08ac1ed7f1e5f099
author Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> 1122867957 -0300
committer Arnaldo Carvalho de Melo <[EMAIL PROTECTED]> 1122867957 -0300

[INET] Move bind_hash from tcp_sk to inet_sk

This should really be in a inet_connection_sock, but I'm leaving it for a later
optimization, when some more fields common to INET transport protocols now in
tcp_sk or inet_sk will be chunked out into inet_connection_sock, for now its
better to concentrate on getting the changes in the core merged to leave the
DCCP tree with only DCCP specific code.

Next changesets will take advantage of this move to generalise things like
tcp_bind_hash, tcp_put_port, tcp_inherit_port, making the later receive a
inet_hashinfo parameter, and even __tcp_tw_hashdance, etc in the future, when
tcp_tw_bucket gets transformed into the struct timewait_sock hierarchy.

tcp_destroy_sock also is eligible as soon as tcp_orphan_count gets moved to
sk_prot.

A cascade of incremental changes will ultimately make the tcp_lookup functions
be fully generic.

Signed-off-by: Arnaldo Carvalho de Melo <[EMAIL PROTECTED]>
Signed-off-by: David S. Miller <[EMAIL PROTECTED]>

------------------------------------------------------------------------------

 include/linux/ip.h       |    2 ++
 include/linux/tcp.h      |    1 -
 include/net/tcp.h        |    2 +-
 net/ipv4/tcp.c           |    4 ++--
 net/ipv4/tcp_ipv4.c      |   21 +++++++++++----------
 net/ipv4/tcp_minisocks.c |   15 ++++++++-------
 net/ipv6/tcp_ipv6.c      |    8 ++++----
 7 files changed, 28 insertions(+), 25 deletions(-)

------------------------------------------------------------------------------

diff --git a/include/linux/ip.h b/include/linux/ip.h
--- a/include/linux/ip.h
+++ b/include/linux/ip.h
@@ -128,6 +128,7 @@ static inline struct inet_request_sock *
        return (struct inet_request_sock *)sk;
 }
 
+struct inet_bind_bucket;
 struct ipv6_pinfo;
 
 struct inet_sock {
@@ -157,6 +158,7 @@ struct inet_sock {
        int                     mc_index;       /* Multicast device index */
        __u32                   mc_addr;
        struct ip_mc_socklist   *mc_list;       /* Group array */
+       struct inet_bind_bucket *bind_hash;
        /*
         * Following members are used to retain the infomation to build
         * an ip header on each ip fragmentation while the socket is corked.
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -258,7 +258,6 @@ struct tcp_sock {
        __u32   snd_sml;        /* Last byte of the most recently transmitted 
small packet */
        __u32   rcv_tstamp;     /* timestamp of last received ACK (for 
keepalives) */
        __u32   lsndtime;       /* timestamp of last sent data packet (for 
restart window) */
-       struct inet_bind_bucket *bind_hash;
        /* Delayed ACK control data */
        struct {
                __u8    pending;        /* ACK is pending */
diff --git a/include/net/tcp.h b/include/net/tcp.h
--- a/include/net/tcp.h
+++ b/include/net/tcp.h
@@ -1266,7 +1266,7 @@ static __inline__ void tcp_set_state(str
                        TCP_INC_STATS(TCP_MIB_ESTABRESETS);
 
                sk->sk_prot->unhash(sk);
-               if (tcp_sk(sk)->bind_hash &&
+               if (inet_sk(sk)->bind_hash &&
                    !(sk->sk_userlocks & SOCK_BINDPORT_LOCK))
                        tcp_put_port(sk);
                /* fall through */
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
--- a/net/ipv4/tcp.c
+++ b/net/ipv4/tcp.c
@@ -1575,7 +1575,7 @@ void tcp_destroy_sock(struct sock *sk)
        BUG_TRAP(sk_unhashed(sk));
 
        /* If it has not 0 inet_sk(sk)->num, it must be bound */
-       BUG_TRAP(!inet_sk(sk)->num || tcp_sk(sk)->bind_hash);
+       BUG_TRAP(!inet_sk(sk)->num || inet_sk(sk)->bind_hash);
 
        sk->sk_prot->destroy(sk);
 
@@ -1802,7 +1802,7 @@ int tcp_disconnect(struct sock *sk, int 
        tcp_sack_reset(&tp->rx_opt);
        __sk_dst_reset(sk);
 
-       BUG_TRAP(!inet->num || tp->bind_hash);
+       BUG_TRAP(!inet->num || inet->bind_hash);
 
        sk->sk_error_report(sk);
        return err;
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -113,9 +113,9 @@ static __inline__ void __tcp_inherit_por
        struct inet_bind_bucket *tb;
 
        spin_lock(&head->lock);
-       tb = tcp_sk(sk)->bind_hash;
+       tb = inet_sk(sk)->bind_hash;
        sk_add_bind_node(child, &tb->owners);
-       tcp_sk(child)->bind_hash = tb;
+       inet_sk(child)->bind_hash = tb;
        spin_unlock(&head->lock);
 }
 
@@ -129,9 +129,10 @@ inline void tcp_inherit_port(struct sock
 void tcp_bind_hash(struct sock *sk, struct inet_bind_bucket *tb,
                   const unsigned short snum)
 {
-       inet_sk(sk)->num = snum;
+       struct inet_sock *inet = inet_sk(sk);
+       inet->num       = snum;
        sk_add_bind_node(sk, &tb->owners);
-       tcp_sk(sk)->bind_hash = tb;
+       inet->bind_hash = tb;
 }
 
 static inline int tcp_bind_conflict(struct sock *sk, struct inet_bind_bucket 
*tb)
@@ -241,9 +242,9 @@ tb_not_found:
                   (!sk->sk_reuse || sk->sk_state == TCP_LISTEN))
                tb->fastreuse = 0;
 success:
-       if (!tcp_sk(sk)->bind_hash)
+       if (!inet_sk(sk)->bind_hash)
                tcp_bind_hash(sk, tb, snum);
-       BUG_TRAP(tcp_sk(sk)->bind_hash == tb);
+       BUG_TRAP(inet_sk(sk)->bind_hash == tb);
        ret = 0;
 
 fail_unlock:
@@ -264,9 +265,9 @@ static void __tcp_put_port(struct sock *
        struct inet_bind_bucket *tb;
 
        spin_lock(&head->lock);
-       tb = tcp_sk(sk)->bind_hash;
+       tb = inet->bind_hash;
        __sk_del_bind_node(sk);
-       tcp_sk(sk)->bind_hash = NULL;
+       inet->bind_hash = NULL;
        inet->num = 0;
        inet_bind_bucket_destroy(tcp_bucket_cachep, tb);
        spin_unlock(&head->lock);
@@ -689,7 +690,7 @@ ok:
        }
 
        head = &tcp_bhash[inet_bhashfn(snum, tcp_bhash_size)];
-       tb  = tcp_sk(sk)->bind_hash;
+       tb  = inet_sk(sk)->bind_hash;
        spin_lock_bh(&head->lock);
        if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) {
                __tcp_v4_hash(sk, 0);
@@ -1937,7 +1938,7 @@ int tcp_v4_destroy_sock(struct sock *sk)
        __skb_queue_purge(&tp->ucopy.prequeue);
 
        /* Clean up a referenced TCP bind bucket. */
-       if (tp->bind_hash)
+       if (inet_sk(sk)->bind_hash)
                tcp_put_port(sk);
 
        /*
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
--- a/net/ipv4/tcp_minisocks.c
+++ b/net/ipv4/tcp_minisocks.c
@@ -296,17 +296,17 @@ kill:
  */
 static void __tcp_tw_hashdance(struct sock *sk, struct tcp_tw_bucket *tw)
 {
+       const struct inet_sock *inet = inet_sk(sk);
        struct inet_ehash_bucket *ehead = &tcp_ehash[sk->sk_hashent];
        struct inet_bind_hashbucket *bhead;
-
        /* Step 1: Put TW into bind hash. Original socket stays there too.
-          Note, that any socket with inet_sk(sk)->num != 0 MUST be bound in
+          Note, that any socket with inet->num != 0 MUST be bound in
           binding cache, even if it is closed.
         */
-       bhead = &tcp_bhash[inet_bhashfn(inet_sk(sk)->num, tcp_bhash_size)];
+       bhead = &tcp_bhash[inet_bhashfn(inet->num, tcp_bhash_size)];
        spin_lock(&bhead->lock);
-       tw->tw_tb = tcp_sk(sk)->bind_hash;
-       BUG_TRAP(tcp_sk(sk)->bind_hash);
+       tw->tw_tb = inet->bind_hash;
+       BUG_TRAP(inet->bind_hash);
        tw_add_bind_node(tw, &tw->tw_tb->owners);
        spin_unlock(&bhead->lock);
 
@@ -694,6 +694,7 @@ struct sock *tcp_create_openreq_child(st
        if(newsk != NULL) {
                struct inet_request_sock *ireq = inet_rsk(req);
                struct tcp_request_sock *treq = tcp_rsk(req);
+               struct inet_sock *newinet = inet_sk(newsk);
                struct tcp_sock *newtp;
                struct sk_filter *filter;
 
@@ -702,10 +703,10 @@ struct sock *tcp_create_openreq_child(st
 
                /* SANITY */
                sk_node_init(&newsk->sk_node);
-               tcp_sk(newsk)->bind_hash = NULL;
+               newinet->bind_hash = NULL;
 
                /* Clone the TCP header template */
-               inet_sk(newsk)->dport = ireq->rmt_port;
+               newinet->dport = ireq->rmt_port;
 
                sock_lock_init(newsk);
                bh_lock_sock(newsk);
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -199,9 +199,9 @@ tb_not_found:
                tb->fastreuse = 0;
 
 success:
-       if (!tcp_sk(sk)->bind_hash)
+       if (!inet_sk(sk)->bind_hash)
                tcp_bind_hash(sk, tb, snum);
-       BUG_TRAP(tcp_sk(sk)->bind_hash == tb);
+       BUG_TRAP(inet_sk(sk)->bind_hash == tb);
        ret = 0;
 
 fail_unlock:
@@ -608,8 +608,8 @@ ok:
                goto out;
        }
 
-       head  = &tcp_bhash[inet_bhashfn(snum, tcp_bhash_size)];
-       tb  = tcp_sk(sk)->bind_hash;
+       head = &tcp_bhash[inet_bhashfn(snum, tcp_bhash_size)];
+       tb   = inet_sk(sk)->bind_hash;
        spin_lock_bh(&head->lock);
 
        if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) {
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to