[INET]: Uninline the __inet_lookup_established function.
This is -700 bytes from the net/ipv4/built-in.o add/remove: 1/0 grow/shrink: 1/3 up/down: 340/-1040 (-700) function old new delta __inet_lookup_established - 339 +339 tcp_sacktag_write_queue 2254 2255 +1 tcp_v4_err 1304 973 -331 tcp_v4_rcv 2089 1744 -345 tcp_v4_do_rcv 826 462 -364 Exporting is for dccp module (used via e.g. inet_lookup). Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
152da81deb
commit
77a5ba55da
|
@ -374,43 +374,9 @@ typedef __u64 __bitwise __addrpair;
|
||||||
*
|
*
|
||||||
* Local BH must be disabled here.
|
* Local BH must be disabled here.
|
||||||
*/
|
*/
|
||||||
static inline struct sock *
|
extern struct sock * __inet_lookup_established(struct inet_hashinfo *hashinfo,
|
||||||
__inet_lookup_established(struct inet_hashinfo *hashinfo,
|
const __be32 saddr, const __be16 sport,
|
||||||
const __be32 saddr, const __be16 sport,
|
const __be32 daddr, const u16 hnum, const int dif);
|
||||||
const __be32 daddr, const u16 hnum,
|
|
||||||
const int dif)
|
|
||||||
{
|
|
||||||
INET_ADDR_COOKIE(acookie, saddr, daddr)
|
|
||||||
const __portpair ports = INET_COMBINED_PORTS(sport, hnum);
|
|
||||||
struct sock *sk;
|
|
||||||
const struct hlist_node *node;
|
|
||||||
/* Optimize here for direct hit, only listening connections can
|
|
||||||
* have wildcards anyways.
|
|
||||||
*/
|
|
||||||
unsigned int hash = inet_ehashfn(daddr, hnum, saddr, sport);
|
|
||||||
struct inet_ehash_bucket *head = inet_ehash_bucket(hashinfo, hash);
|
|
||||||
rwlock_t *lock = inet_ehash_lockp(hashinfo, hash);
|
|
||||||
|
|
||||||
prefetch(head->chain.first);
|
|
||||||
read_lock(lock);
|
|
||||||
sk_for_each(sk, node, &head->chain) {
|
|
||||||
if (INET_MATCH(sk, hash, acookie, saddr, daddr, ports, dif))
|
|
||||||
goto hit; /* You sunk my battleship! */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Must check for a TIME_WAIT'er before going to listener hash. */
|
|
||||||
sk_for_each(sk, node, &head->twchain) {
|
|
||||||
if (INET_TW_MATCH(sk, hash, acookie, saddr, daddr, ports, dif))
|
|
||||||
goto hit;
|
|
||||||
}
|
|
||||||
sk = NULL;
|
|
||||||
out:
|
|
||||||
read_unlock(lock);
|
|
||||||
return sk;
|
|
||||||
hit:
|
|
||||||
sock_hold(sk);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline struct sock *
|
static inline struct sock *
|
||||||
inet_lookup_established(struct inet_hashinfo *hashinfo,
|
inet_lookup_established(struct inet_hashinfo *hashinfo,
|
||||||
|
|
|
@ -190,6 +190,44 @@ sherry_cache:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(__inet_lookup_listener);
|
EXPORT_SYMBOL_GPL(__inet_lookup_listener);
|
||||||
|
|
||||||
|
struct sock * __inet_lookup_established(struct inet_hashinfo *hashinfo,
|
||||||
|
const __be32 saddr, const __be16 sport,
|
||||||
|
const __be32 daddr, const u16 hnum,
|
||||||
|
const int dif)
|
||||||
|
{
|
||||||
|
INET_ADDR_COOKIE(acookie, saddr, daddr)
|
||||||
|
const __portpair ports = INET_COMBINED_PORTS(sport, hnum);
|
||||||
|
struct sock *sk;
|
||||||
|
const struct hlist_node *node;
|
||||||
|
/* Optimize here for direct hit, only listening connections can
|
||||||
|
* have wildcards anyways.
|
||||||
|
*/
|
||||||
|
unsigned int hash = inet_ehashfn(daddr, hnum, saddr, sport);
|
||||||
|
struct inet_ehash_bucket *head = inet_ehash_bucket(hashinfo, hash);
|
||||||
|
rwlock_t *lock = inet_ehash_lockp(hashinfo, hash);
|
||||||
|
|
||||||
|
prefetch(head->chain.first);
|
||||||
|
read_lock(lock);
|
||||||
|
sk_for_each(sk, node, &head->chain) {
|
||||||
|
if (INET_MATCH(sk, hash, acookie, saddr, daddr, ports, dif))
|
||||||
|
goto hit; /* You sunk my battleship! */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Must check for a TIME_WAIT'er before going to listener hash. */
|
||||||
|
sk_for_each(sk, node, &head->twchain) {
|
||||||
|
if (INET_TW_MATCH(sk, hash, acookie, saddr, daddr, ports, dif))
|
||||||
|
goto hit;
|
||||||
|
}
|
||||||
|
sk = NULL;
|
||||||
|
out:
|
||||||
|
read_unlock(lock);
|
||||||
|
return sk;
|
||||||
|
hit:
|
||||||
|
sock_hold(sk);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(__inet_lookup_established);
|
||||||
|
|
||||||
/* called with local bh disabled */
|
/* called with local bh disabled */
|
||||||
static int __inet_check_established(struct inet_timewait_death_row *death_row,
|
static int __inet_check_established(struct inet_timewait_death_row *death_row,
|
||||||
struct sock *sk, __u16 lport,
|
struct sock *sk, __u16 lport,
|
||||||
|
|
Loading…
Reference in a new issue