Message ID | 20230811025530.3510703-3-imagedong@tencent.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 800a666141de75baebb59b347b9c9e43d963e4da |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: tcp: support probing OOM | expand |
On Fri, Aug 11, 2023 at 5:01 AM <menglong8.dong@gmail.com> wrote: > > From: Menglong Dong <imagedong@tencent.com> > > Fow now, an ACK can update the window in following case, according to > the tcp_may_update_window(): > > 1. the ACK acknowledged new data > 2. the ACK has new data > 3. the ACK expand the window and the seq of it is valid > > Now, we allow the ACK update the window if the window is 0, and the > seq/ack of it is valid. This is for the case that the receiver replies > an zero-window ACK when it is under memory stress and can't queue the new > data. > > Signed-off-by: Menglong Dong <imagedong@tencent.com> Reviewed-by: Eric Dumazet <edumazet@google.com>
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 2ac059483410..d34d52fdfdb1 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -3525,7 +3525,7 @@ static inline bool tcp_may_update_window(const struct tcp_sock *tp, { return after(ack, tp->snd_una) || after(ack_seq, tp->snd_wl1) || - (ack_seq == tp->snd_wl1 && nwin > tp->snd_wnd); + (ack_seq == tp->snd_wl1 && (nwin > tp->snd_wnd || !nwin)); } /* If we update tp->snd_una, also update tp->bytes_acked */