]> www.infradead.org Git - linux.git/commitdiff
tcp: rstreason: introduce SK_RST_REASON_TCP_ABORT_ON_MEMORY for active reset
authorJason Xing <kernelxing@tencent.com>
Fri, 2 Aug 2024 10:21:08 +0000 (18:21 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 7 Aug 2024 09:24:45 +0000 (10:24 +0100)
Introducing a new type TCP_ABORT_ON_MEMORY for tcp reset reason to handle
out of memory case.

Signed-off-by: Jason Xing <kernelxing@tencent.com>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/rstreason.h
net/ipv4/tcp.c
net/ipv4/tcp_timer.c

index fbbaeb969e6aa9ecef1c307efd13a559a4623cac..eef658da8952a3dd755c51d43d6d417956e97112 100644 (file)
@@ -19,6 +19,7 @@
        FN(INVALID_SYN)                 \
        FN(TCP_ABORT_ON_CLOSE)          \
        FN(TCP_ABORT_ON_LINGER)         \
+       FN(TCP_ABORT_ON_MEMORY)         \
        FN(MPTCP_RST_EUNSPEC)           \
        FN(MPTCP_RST_EMPTCP)            \
        FN(MPTCP_RST_ERESOURCE)         \
@@ -96,6 +97,11 @@ enum sk_rst_reason {
         * corresponding to LINUX_MIB_TCPABORTONLINGER
         */
        SK_RST_REASON_TCP_ABORT_ON_LINGER,
+       /**
+        * @SK_RST_REASON_TCP_ABORT_ON_MEMORY: abort on memory
+        * corresponding to LINUX_MIB_TCPABORTONMEMORY
+        */
+       SK_RST_REASON_TCP_ABORT_ON_MEMORY,
 
        /* Copy from include/uapi/linux/mptcp.h.
         * These reset fields will not be changed since they adhere to
index 5b0f1d1fc69784ead5d1dca6709508ca180b1cac..fd928c447ce82153d28361feb9ae4f01669ad219 100644 (file)
@@ -2927,7 +2927,7 @@ adjudge_to_death:
                if (tcp_check_oom(sk, 0)) {
                        tcp_set_state(sk, TCP_CLOSE);
                        tcp_send_active_reset(sk, GFP_ATOMIC,
-                                             SK_RST_REASON_NOT_SPECIFIED);
+                                             SK_RST_REASON_TCP_ABORT_ON_MEMORY);
                        __NET_INC_STATS(sock_net(sk),
                                        LINUX_MIB_TCPABORTONMEMORY);
                } else if (!check_net(sock_net(sk))) {
index 4d40615dc8fc2831dc930449985c9a9fbf40d4d6..0fba4a4fb9886a56ca90ac85f3af936dddaab533 100644 (file)
@@ -125,7 +125,7 @@ static int tcp_out_of_resources(struct sock *sk, bool do_reset)
                        do_reset = true;
                if (do_reset)
                        tcp_send_active_reset(sk, GFP_ATOMIC,
-                                             SK_RST_REASON_NOT_SPECIFIED);
+                                             SK_RST_REASON_TCP_ABORT_ON_MEMORY);
                tcp_done(sk);
                __NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPABORTONMEMORY);
                return 1;