aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/inet_hashtables.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/inet_hashtables.h')
-rw-r--r--include/net/inet_hashtables.h40
1 files changed, 3 insertions, 37 deletions
diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h
index 982d487751f9..65ddb25d62e8 100644
--- a/include/net/inet_hashtables.h
+++ b/include/net/inet_hashtables.h
@@ -374,43 +374,9 @@ typedef __u64 __bitwise __addrpair;
374 * 374 *
375 * Local BH must be disabled here. 375 * Local BH must be disabled here.
376 */ 376 */
377static inline struct sock * 377extern struct sock * __inet_lookup_established(struct inet_hashinfo *hashinfo,
378 __inet_lookup_established(struct inet_hashinfo *hashinfo, 378 const __be32 saddr, const __be16 sport,
379 const __be32 saddr, const __be16 sport, 379 const __be32 daddr, const u16 hnum, const int dif);
380 const __be32 daddr, const u16 hnum,
381 const int dif)
382{
383 INET_ADDR_COOKIE(acookie, saddr, daddr)
384 const __portpair ports = INET_COMBINED_PORTS(sport, hnum);
385 struct sock *sk;
386 const struct hlist_node *node;
387 /* Optimize here for direct hit, only listening connections can
388 * have wildcards anyways.
389 */
390 unsigned int hash = inet_ehashfn(daddr, hnum, saddr, sport);
391 struct inet_ehash_bucket *head = inet_ehash_bucket(hashinfo, hash);
392 rwlock_t *lock = inet_ehash_lockp(hashinfo, hash);
393
394 prefetch(head->chain.first);
395 read_lock(lock);
396 sk_for_each(sk, node, &head->chain) {
397 if (INET_MATCH(sk, hash, acookie, saddr, daddr, ports, dif))
398 goto hit; /* You sunk my battleship! */
399 }
400
401 /* Must check for a TIME_WAIT'er before going to listener hash. */
402 sk_for_each(sk, node, &head->twchain) {
403 if (INET_TW_MATCH(sk, hash, acookie, saddr, daddr, ports, dif))
404 goto hit;
405 }
406 sk = NULL;
407out:
408 read_unlock(lock);
409 return sk;
410hit:
411 sock_hold(sk);
412 goto out;
413}
414 380
415static inline struct sock * 381static inline struct sock *
416 inet_lookup_established(struct inet_hashinfo *hashinfo, 382 inet_lookup_established(struct inet_hashinfo *hashinfo,