diff options
author | Eric Dumazet <edumazet@google.com> | 2012-05-02 05:58:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-05-02 21:11:11 -0400 |
commit | b081f85c2977b1cbb6e635d53d9512f1ef985972 (patch) | |
tree | 3b41dfe3ee282c175907e8bcf9614385115fa2e6 /include/net | |
parent | 923dd347b8904c24bcac89bf038ed4da87f8aa90 (diff) |
net: implement tcp coalescing in tcp_queue_rcv()
Extend tcp coalescing implementing it from tcp_queue_rcv(), the main
receiver function when application is not blocked in recvmsg().
Function tcp_queue_rcv() is moved a bit to allow its call from
tcp_data_queue()
This gives good results especially if GRO could not kick, and if skb
head is a fragment.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Alexander Duyck <alexander.h.duyck@intel.com>
Cc: Neal Cardwell <ncardwell@google.com>
Cc: Tom Herbert <therbert@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/tcp.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/net/tcp.h b/include/net/tcp.h index 5283aa4bfa23..c826ed7b007b 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -439,7 +439,8 @@ extern int tcp_disconnect(struct sock *sk, int flags); | |||
439 | 439 | ||
440 | void tcp_connect_init(struct sock *sk); | 440 | void tcp_connect_init(struct sock *sk); |
441 | void tcp_finish_connect(struct sock *sk, struct sk_buff *skb); | 441 | void tcp_finish_connect(struct sock *sk, struct sk_buff *skb); |
442 | void tcp_queue_rcv(struct sock *sk, struct sk_buff *skb, int hdrlen); | 442 | int __must_check tcp_queue_rcv(struct sock *sk, struct sk_buff *skb, |
443 | int hdrlen, bool *fragstolen); | ||
443 | 444 | ||
444 | /* From syncookies.c */ | 445 | /* From syncookies.c */ |
445 | extern __u32 syncookie_secret[2][16-4+SHA_DIGEST_WORDS]; | 446 | extern __u32 syncookie_secret[2][16-4+SHA_DIGEST_WORDS]; |