Merge branch 'tcp-oom-probe'
authorDavid S. Miller <davem@davemloft.net>
Sun, 13 Aug 2023 11:21:38 +0000 (12:21 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 13 Aug 2023 11:21:38 +0000 (12:21 +0100)
commit86f03776f6d58558912bc05158fa75add1886aca
tree7a98005eb4c3cc91e5bfe987db7f8b6da28e072d
parent3e6860ec3a2252249e310b0e6e88e2258171b3d0
parent031c44b7527aec2f22ddaae4bcd8b085ff810ec4
Merge branch 'tcp-oom-probe'

Menglong Dong says:

====================
net: tcp: support probing OOM

In this series, we make some small changes to make the tcp
retransmission become zero-window probes if the receiver drops the skb
because of memory pressure.

In the 1st patch, we reply a zero-window ACK if the skb is dropped
because out of memory, instead of dropping the skb silently.

In the 2nd patch, we allow a zero-window ACK to update the window.

In the 3rd patch, fix unexcepted socket die when snd_wnd is 0 in
tcp_retransmit_timer().

In the 4th patch, we refactor the debug message in
tcp_retransmit_timer() to make it more correct.

After these changes, the tcp can probe the OOM of the receiver forever.

Changes since v3:
- make the timeout "2 * TCP_RTO_MAX" in the 3rd patch
- tp->retrans_stamp is not based on jiffies and can't be compared with
  icsk->icsk_timeout in the 3rd patch. Fix it.
- introduce the 4th patch

Changes since v2:
- refactor the code to avoid code duplication in the 1st patch
- use after() instead of max() in tcp_rtx_probe0_timed_out()

Changes since v1:
- send 0 rwin ACK for the receive queue empty case when necessary in the
  1st patch
- send the ACK immediately by using the ICSK_ACK_NOW flag in the 1st
  patch
- consider the case of the connection restart from idle, as Neal comment,
  in the 3rd patch
====================

Signed-off-by: David S. Miller <davem@davemloft.net>