From b2fa6101403154de38cfe5c7bc8b7733dc0a5a3a Mon Sep 17 00:00:00 2001 From: Eric Dumazet Date: Mon, 22 Jul 2019 06:47:35 +0000 Subject: [PATCH] tcp: make tcp_space() aware of socket backlog mainline inclusion from mainline-v5.0-rc1 commit 85bdf7db5b53cdcc7a901db12bcb3d0063e3866d category: perf bugzilla: NA CVE: NA ------------------------------------------------- Jean-Louis Dupond reported poor iscsi TCP receive performance that we tracked to backlog drops. Apparently we fail to send window updates reflecting the fact that we are under stress. Note that we might lack a proper window increase when backlog is fully processed, since __release_sock() clears sk->sk_backlog.len _after_ all skbs have been processed. This should not matter in practice. If we had a significant load through socket backlog, we are in a dangerous situation. Reported-by: Jean-Louis Dupond Signed-off-by: Eric Dumazet Acked-by: Neal Cardwell Acked-by: Yuchung Cheng Tested-by: Jean-Louis Dupond Signed-off-by: David S. Miller Signed-off-by: Biaoxiang Reviewed-by: Mao Wenan Signed-off-by: Yang Yingliang --- include/net/tcp.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/net/tcp.h b/include/net/tcp.h index 741154d70a9a..96d6f233c616 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -1352,7 +1352,7 @@ static inline int tcp_win_from_space(const struct sock *sk, int space) /* Note: caller must be prepared to deal with negative returns */ static inline int tcp_space(const struct sock *sk) { - return tcp_win_from_space(sk, sk->sk_rcvbuf - + return tcp_win_from_space(sk, sk->sk_rcvbuf - sk->sk_backlog.len - atomic_read(&sk->sk_rmem_alloc)); } -- GitLab