diff options
| author | Andi Kleen <ak@linux.intel.com> | 2008-07-21 18:16:54 -0400 |
|---|---|---|
| committer | Andi Kleen <ak@linux.intel.com> | 2008-07-21 18:16:54 -0400 |
| commit | 8294fafdafc602ed11f401c44628fab8558c5cf5 (patch) | |
| tree | c8d0371cfd05226b56d52bfde9c69f8caca4501d /net/ipv4/inet_hashtables.c | |
| parent | 725c3a2d70f958adee807c178178819a50f68a56 (diff) | |
| parent | bf20e740a4bcc686de02e2fd1c1810a58872f46e (diff) | |
Merge branch 'for-upstream/acpi-test' of git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6 into release-2.6.27
Diffstat (limited to 'net/ipv4/inet_hashtables.c')
| -rw-r--r-- | net/ipv4/inet_hashtables.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c index 2023d37b2708..115f53722d20 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c | |||
| @@ -70,7 +70,8 @@ void inet_bind_hash(struct sock *sk, struct inet_bind_bucket *tb, | |||
| 70 | static void __inet_put_port(struct sock *sk) | 70 | static void __inet_put_port(struct sock *sk) |
| 71 | { | 71 | { |
| 72 | struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo; | 72 | struct inet_hashinfo *hashinfo = sk->sk_prot->h.hashinfo; |
| 73 | const int bhash = inet_bhashfn(inet_sk(sk)->num, hashinfo->bhash_size); | 73 | const int bhash = inet_bhashfn(sock_net(sk), inet_sk(sk)->num, |
| 74 | hashinfo->bhash_size); | ||
| 74 | struct inet_bind_hashbucket *head = &hashinfo->bhash[bhash]; | 75 | struct inet_bind_hashbucket *head = &hashinfo->bhash[bhash]; |
| 75 | struct inet_bind_bucket *tb; | 76 | struct inet_bind_bucket *tb; |
| 76 | 77 | ||
| @@ -95,7 +96,8 @@ EXPORT_SYMBOL(inet_put_port); | |||
| 95 | void __inet_inherit_port(struct sock *sk, struct sock *child) | 96 | void __inet_inherit_port(struct sock *sk, struct sock *child) |
| 96 | { | 97 | { |
| 97 | struct inet_hashinfo *table = sk->sk_prot->h.hashinfo; | 98 | struct inet_hashinfo *table = sk->sk_prot->h.hashinfo; |
| 98 | const int bhash = inet_bhashfn(inet_sk(child)->num, table->bhash_size); | 99 | const int bhash = inet_bhashfn(sock_net(sk), inet_sk(child)->num, |
| 100 | table->bhash_size); | ||
| 99 | struct inet_bind_hashbucket *head = &table->bhash[bhash]; | 101 | struct inet_bind_hashbucket *head = &table->bhash[bhash]; |
| 100 | struct inet_bind_bucket *tb; | 102 | struct inet_bind_bucket *tb; |
| 101 | 103 | ||
| @@ -192,7 +194,7 @@ struct sock *__inet_lookup_listener(struct net *net, | |||
| 192 | const struct hlist_head *head; | 194 | const struct hlist_head *head; |
| 193 | 195 | ||
| 194 | read_lock(&hashinfo->lhash_lock); | 196 | read_lock(&hashinfo->lhash_lock); |
| 195 | head = &hashinfo->listening_hash[inet_lhashfn(hnum)]; | 197 | head = &hashinfo->listening_hash[inet_lhashfn(net, hnum)]; |
| 196 | if (!hlist_empty(head)) { | 198 | if (!hlist_empty(head)) { |
| 197 | const struct inet_sock *inet = inet_sk((sk = __sk_head(head))); | 199 | const struct inet_sock *inet = inet_sk((sk = __sk_head(head))); |
| 198 | 200 | ||
| @@ -225,7 +227,7 @@ struct sock * __inet_lookup_established(struct net *net, | |||
| 225 | /* Optimize here for direct hit, only listening connections can | 227 | /* Optimize here for direct hit, only listening connections can |
| 226 | * have wildcards anyways. | 228 | * have wildcards anyways. |
| 227 | */ | 229 | */ |
| 228 | unsigned int hash = inet_ehashfn(daddr, hnum, saddr, sport); | 230 | unsigned int hash = inet_ehashfn(net, daddr, hnum, saddr, sport); |
| 229 | struct inet_ehash_bucket *head = inet_ehash_bucket(hashinfo, hash); | 231 | struct inet_ehash_bucket *head = inet_ehash_bucket(hashinfo, hash); |
| 230 | rwlock_t *lock = inet_ehash_lockp(hashinfo, hash); | 232 | rwlock_t *lock = inet_ehash_lockp(hashinfo, hash); |
| 231 | 233 | ||
| @@ -265,13 +267,13 @@ static int __inet_check_established(struct inet_timewait_death_row *death_row, | |||
| 265 | int dif = sk->sk_bound_dev_if; | 267 | int dif = sk->sk_bound_dev_if; |
| 266 | INET_ADDR_COOKIE(acookie, saddr, daddr) | 268 | INET_ADDR_COOKIE(acookie, saddr, daddr) |
| 267 | const __portpair ports = INET_COMBINED_PORTS(inet->dport, lport); | 269 | const __portpair ports = INET_COMBINED_PORTS(inet->dport, lport); |
| 268 | unsigned int hash = inet_ehashfn(daddr, lport, saddr, inet->dport); | 270 | struct net *net = sock_net(sk); |
| 271 | unsigned int hash = inet_ehashfn(net, daddr, lport, saddr, inet->dport); | ||
| 269 | struct inet_ehash_bucket *head = inet_ehash_bucket(hinfo, hash); | 272 | struct inet_ehash_bucket *head = inet_ehash_bucket(hinfo, hash); |
| 270 | rwlock_t *lock = inet_ehash_lockp(hinfo, hash); | 273 | rwlock_t *lock = inet_ehash_lockp(hinfo, hash); |
| 271 | struct sock *sk2; | 274 | struct sock *sk2; |
| 272 | const struct hlist_node *node; | 275 | const struct hlist_node *node; |
| 273 | struct inet_timewait_sock *tw; | 276 | struct inet_timewait_sock *tw; |
| 274 | struct net *net = sock_net(sk); | ||
| 275 | 277 | ||
| 276 | prefetch(head->chain.first); | 278 | prefetch(head->chain.first); |
| 277 | write_lock(lock); | 279 | write_lock(lock); |
| @@ -310,11 +312,11 @@ unique: | |||
| 310 | 312 | ||
| 311 | if (twp) { | 313 | if (twp) { |
| 312 | *twp = tw; | 314 | *twp = tw; |
| 313 | NET_INC_STATS_BH(LINUX_MIB_TIMEWAITRECYCLED); | 315 | NET_INC_STATS_BH(net, LINUX_MIB_TIMEWAITRECYCLED); |
| 314 | } else if (tw) { | 316 | } else if (tw) { |
| 315 | /* Silly. Should hash-dance instead... */ | 317 | /* Silly. Should hash-dance instead... */ |
| 316 | inet_twsk_deschedule(tw, death_row); | 318 | inet_twsk_deschedule(tw, death_row); |
| 317 | NET_INC_STATS_BH(LINUX_MIB_TIMEWAITRECYCLED); | 319 | NET_INC_STATS_BH(net, LINUX_MIB_TIMEWAITRECYCLED); |
| 318 | 320 | ||
| 319 | inet_twsk_put(tw); | 321 | inet_twsk_put(tw); |
| 320 | } | 322 | } |
| @@ -438,7 +440,8 @@ int __inet_hash_connect(struct inet_timewait_death_row *death_row, | |||
| 438 | local_bh_disable(); | 440 | local_bh_disable(); |
| 439 | for (i = 1; i <= remaining; i++) { | 441 | for (i = 1; i <= remaining; i++) { |
| 440 | port = low + (i + offset) % remaining; | 442 | port = low + (i + offset) % remaining; |
| 441 | head = &hinfo->bhash[inet_bhashfn(port, hinfo->bhash_size)]; | 443 | head = &hinfo->bhash[inet_bhashfn(net, port, |
| 444 | hinfo->bhash_size)]; | ||
| 442 | spin_lock(&head->lock); | 445 | spin_lock(&head->lock); |
| 443 | 446 | ||
| 444 | /* Does not bother with rcv_saddr checks, | 447 | /* Does not bother with rcv_saddr checks, |
| @@ -493,7 +496,7 @@ ok: | |||
| 493 | goto out; | 496 | goto out; |
| 494 | } | 497 | } |
| 495 | 498 | ||
| 496 | head = &hinfo->bhash[inet_bhashfn(snum, hinfo->bhash_size)]; | 499 | head = &hinfo->bhash[inet_bhashfn(net, snum, hinfo->bhash_size)]; |
| 497 | tb = inet_csk(sk)->icsk_bind_hash; | 500 | tb = inet_csk(sk)->icsk_bind_hash; |
| 498 | spin_lock_bh(&head->lock); | 501 | spin_lock_bh(&head->lock); |
| 499 | if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) { | 502 | if (sk_head(&tb->owners) == sk && !sk->sk_bind_node.next) { |
