return (struct inet_request_sock *)sk;
 }
 
+struct inet_bind_bucket;
 struct ipv6_pinfo;
 
 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.
 
        __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 */
 
                        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 */
 
        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);
 
        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;
 
        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);
 }
 
 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)
                   (!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:
        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);
        }
 
        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);
        __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);
 
        /*
 
  */
 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);
 
        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;
 
 
                /* 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);
 
                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:
                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) {