net: tcp: use tcp_drop_reason() for tcp_data_queue_ofo()
authorMenglong Dong <imagedong@tencent.com>
Sun, 20 Feb 2022 07:06:37 +0000 (15:06 +0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 20 Feb 2022 13:55:31 +0000 (13:55 +0000)
Replace tcp_drop() used in tcp_data_queue_ofo with tcp_drop_reason().
Following drop reasons are introduced:

SKB_DROP_REASON_TCP_OFOMERGE

Reviewed-by: Mengen Sun <mengensun@tencent.com>
Reviewed-by: Hao Peng <flyingpeng@tencent.com>
Signed-off-by: Menglong Dong <imagedong@tencent.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/skbuff.h
include/trace/events/skb.h
net/ipv4/tcp_input.c

index 554ef2c848ee36fba7ea676eb52b10605d323077..a3e90efe65861c32078684ef29bfdefd9f92d6f3 100644 (file)
@@ -376,6 +376,10 @@ enum skb_drop_reason {
                                         * the right edges of receive
                                         * window
                                         */
+       SKB_DROP_REASON_TCP_OFOMERGE,   /* the data of skb is already in
+                                        * the ofo queue, corresponding to
+                                        * LINUX_MIB_TCPOFOMERGE
+                                        */
        SKB_DROP_REASON_MAX,
 };
 
index cc1c8f7eaf728cfae43405ab3c12f13f43834d47..2ab7193313aa4d6a3e067fbd9a1a2edd8d0f3c15 100644 (file)
@@ -36,6 +36,7 @@
        EM(SKB_DROP_REASON_TCP_ZEROWINDOW, TCP_ZEROWINDOW)      \
        EM(SKB_DROP_REASON_TCP_OLD_DATA, TCP_OLD_DATA)          \
        EM(SKB_DROP_REASON_TCP_OVERWINDOW, TCP_OVERWINDOW)      \
+       EM(SKB_DROP_REASON_TCP_OFOMERGE, TCP_OFOMERGE)          \
        EMe(SKB_DROP_REASON_MAX, MAX)
 
 #undef EM
index 041c778fd0b517bda2bbd81e43bf23a226313192..2088f93fa37b5fb9110e7933242a27bd4009990e 100644 (file)
@@ -4779,7 +4779,7 @@ static void tcp_data_queue_ofo(struct sock *sk, struct sk_buff *skb)
        if (unlikely(tcp_try_rmem_schedule(sk, skb, skb->truesize))) {
                NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPOFODROP);
                sk->sk_data_ready(sk);
-               tcp_drop(sk, skb);
+               tcp_drop_reason(sk, skb, SKB_DROP_REASON_PROTO_MEM);
                return;
        }
 
@@ -4842,7 +4842,8 @@ coalesce_done:
                                /* All the bits are present. Drop. */
                                NET_INC_STATS(sock_net(sk),
                                              LINUX_MIB_TCPOFOMERGE);
-                               tcp_drop(sk, skb);
+                               tcp_drop_reason(sk, skb,
+                                               SKB_DROP_REASON_TCP_OFOMERGE);
                                skb = NULL;
                                tcp_dsack_set(sk, seq, end_seq);
                                goto add_sack;
@@ -4861,7 +4862,8 @@ coalesce_done:
                                                 TCP_SKB_CB(skb1)->end_seq);
                                NET_INC_STATS(sock_net(sk),
                                              LINUX_MIB_TCPOFOMERGE);
-                               tcp_drop(sk, skb1);
+                               tcp_drop_reason(sk, skb1,
+                                               SKB_DROP_REASON_TCP_OFOMERGE);
                                goto merge_right;
                        }
                } else if (tcp_ooo_try_coalesce(sk, skb1,
@@ -4889,7 +4891,7 @@ merge_right:
                tcp_dsack_extend(sk, TCP_SKB_CB(skb1)->seq,
                                 TCP_SKB_CB(skb1)->end_seq);
                NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPOFOMERGE);
-               tcp_drop(sk, skb1);
+               tcp_drop_reason(sk, skb1, SKB_DROP_REASON_TCP_OFOMERGE);
        }
        /* If there is no skb after us, we are the last_skb ! */
        if (!skb1)