2.6.24-rc2-rt1 - inet-hash-bits-ipv6-fix.patch

From: Sven-Thorsten Dietrich <hidden>
Date: 2007-11-16 11:23:24
Subsystem: networking [general], networking [tcp], the rest · Maintainers: "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Neal Cardwell, Linus Torvalds

Hello Nakagawa-san,

The above inet-hash-bits-ipv6-fix.patch in RT backs-out a hunk, that was
just pushed into Kernel.org after -rc2.

It will cause a compile error, because by the 2.6.24-rc2-git4 patch,
the.lock which ipv6-fix restores and uses, disappears.

I'm not sure about the locking, so I thought I'd mention it, since you
have stepped through all this before.

Regards,

Sven

Here are the 2 conflicting hunks...
From patches.rt/inet-hash-bits-ipv6-fix.patch:
@@ -35,14 +37,16 @@ void __inet6_hash(struct inet_hashinfo *
                lock = &hashinfo->lhash_lock;
                inet_listen_wlock(hashinfo);
        } else {
-               unsigned int hash;
-               sk->sk_hash = hash = inet6_sk_ehashfn(sk);
-               list = &inet_ehash_bucket(hashinfo, hash)->chain;
-               lock = inet_ehash_lockp(hashinfo, hash);
+               sk->sk_hash = inet6_sk_ehashfn(sk);
+               index = inet_ehash_index(hashinfo, sk->sk_hash);
+               list = &hashinfo->ehash[index].chain;
+               lock = &hashinfo->ehash[index].lock;
+               bitmask = hashinfo->ebitmask;
                write_lock(lock);
        }

        __sk_add_node(sk, list);
+       __inet_hash_setbit(bitmask, index);
        sock_prot_inc_use(sk->sk_prot);
        write_unlock(lock);
Git 4:
index 4427dcd..469216d 100644
--- a/include/net/inet_hashtables.h
+++ b/include/net/inet_hashtables.h
@@ -23,6 +23,7 @@
 #include <linux/spinlock.h>
 #include <linux/types.h>
 #include <linux/wait.h>
+#include <linux/vmalloc.h>

 #include <net/inet_connection_sock.h>
 #include <net/inet_sock.h>
@@ -37,7 +38,6 @@
  * I'll experiment with dynamic table growth later.
  */
 struct inet_ehash_bucket {
-       rwlock_t          lock;
        struct hlist_head chain;
        struct hlist_head twchain;
 };
diff --git a/net/ipv6/inet6_hashtables.c b/net/ipv6/inet6_hashtables.c
index d6f1026..adc73ad 100644
--- a/net/ipv6/inet6_hashtables.c
+++ b/net/ipv6/inet6_hashtables.c
@@ -37,9 +37,8 @@ void __inet6_hash(struct inet_hashinfo *hashinfo,
        } else {
                unsigned int hash; 
                sk->sk_hash = hash = inet6_sk_ehashfn(sk);
-               hash &= (hashinfo->ehash_size - 1);
-               list = &hashinfo->ehash[hash].chain;
-               lock = &hashinfo->ehash[hash].lock;
+               list = &inet_ehash_bucket(hashinfo, hash)->chain;
+               lock = inet_ehash_lockp(hashinfo, hash);
                write_lock(lock);
        }





-- 
Sven-Thorsten Dietrich
+1 415 694-2930
( www.novell.com/linux )
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help