As tcp_data_queue() function is used just only twice it's better
to move out the first check and wrap it with inline. It saves a
single call in case the condition evaluated as true.

Signed-off-by: Ilya V. Matveychikov <matvejchi...@gmail.com>
---
 net/ipv4/tcp_input.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 2920e0c..141a722 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -4585,16 +4585,12 @@ int tcp_send_rcvq(struct sock *sk, struct msghdr *msg, 
size_t size)
 
 }
 
-static void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
+static void __tcp_data_queue(struct sock *sk, struct sk_buff *skb)
 {
        struct tcp_sock *tp = tcp_sk(sk);
        bool fragstolen = false;
        int eaten = -1;
 
-       if (TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq) {
-               __kfree_skb(skb);
-               return;
-       }
        skb_dst_drop(skb);
        __skb_pull(skb, tcp_hdr(skb)->doff * 4);
 
@@ -4703,6 +4699,14 @@ static void tcp_data_queue(struct sock *sk, struct 
sk_buff *skb)
        tcp_data_queue_ofo(sk, skb);
 }
 
+static inline void tcp_data_queue(struct sock *sk, struct sk_buff *skb)
+{
+       if (TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq)
+               __kfree_skb(skb);
+       else
+               __tcp_data_queue(sk, skb);
+}
+
 static struct sk_buff *tcp_skb_next(struct sk_buff *skb, struct sk_buff_head 
*list)
 {
        if (list)
-- 
2.7.4


Reply via email to