Message ID | 20201023174856.200394-1-arjunroy.kdev@gmail.com |
---|---|
State | New |
Headers | show |
Series | [net] tcp: Prevent low rmem stalls with SO_RCVLOWAT. | expand |
On Fri, 23 Oct 2020 10:48:57 -0700 Arjun Roy wrote: > From: Arjun Roy <arjunroy@google.com> > > With SO_RCVLOWAT, under memory pressure, > it is possible to enter a state where: > > 1. We have not received enough bytes to satisfy SO_RCVLOWAT. > 2. We have not entered buffer pressure (see tcp_rmem_pressure()). > 3. But, we do not have enough buffer space to accept more packets. Doesn't apply cleanly to net: Applying: tcp: Prevent low rmem stalls with SO_RCVLOWAT. error: sha1 information is lacking or useless (net/ipv4/tcp.c). error: could not build fake ancestor hint: Use 'git am --show-current-patch=diff' to see the failed patch Patch failed at 0001 tcp: Prevent low rmem stalls with SO_RCVLOWAT. When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort".
Acknowledged, I have rebased onto net master just now and I think that should fix the sha1 information. v2 patch has been mailed. Sorry for the error first time round :) -Arjun On Fri, Oct 23, 2020 at 11:31 AM Jakub Kicinski <kuba@kernel.org> wrote: > > On Fri, 23 Oct 2020 10:48:57 -0700 Arjun Roy wrote: > > From: Arjun Roy <arjunroy@google.com> > > > > With SO_RCVLOWAT, under memory pressure, > > it is possible to enter a state where: > > > > 1. We have not received enough bytes to satisfy SO_RCVLOWAT. > > 2. We have not entered buffer pressure (see tcp_rmem_pressure()). > > 3. But, we do not have enough buffer space to accept more packets. > > Doesn't apply cleanly to net: > > Applying: tcp: Prevent low rmem stalls with SO_RCVLOWAT. > error: sha1 information is lacking or useless (net/ipv4/tcp.c). > error: could not build fake ancestor > hint: Use 'git am --show-current-patch=diff' to see the failed patch > Patch failed at 0001 tcp: Prevent low rmem stalls with SO_RCVLOWAT. > When you have resolved this problem, run "git am --continue". > If you prefer to skip this patch, run "git am --skip" instead. > To restore the original branch and stop patching, run "git am --abort".
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index de19af65bc70..f605cf87b9be 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -521,6 +521,8 @@ static inline bool tcp_stream_is_readable(const struct tcp_sock *tp, return true; if (tcp_rmem_pressure(sk)) return true; + if (tcp_receive_window(tp) <= inet_csk(sk)->icsk_ack.rcv_mss) + return true; } if (sk->sk_prot->stream_memory_read) return sk->sk_prot->stream_memory_read(sk); diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index d285d67c0ef2..30b450ebaae0 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -5294,7 +5294,8 @@ void tcp_data_ready(struct sock *sk) int avail = tp->rcv_nxt - tp->copied_seq; if (avail < sk->sk_rcvlowat && !tcp_rmem_pressure(sk) && - !sock_flag(sk, SOCK_DONE)) + !sock_flag(sk, SOCK_DONE) && + tcp_receive_window(tp) > inet_csk(sk)->icsk_ack.rcv_mss) return; DIRECT_CALL(sock, sk_data_ready, sk->sk_data_ready, sk);