-----Original Message-----
From: Paolo Abeni pabeni@redhat.com Sent: Tuesday, May 20, 2025 12:04 PM To: Chia-Yu Chang (Nokia) chia-yu.chang@nokia-bell-labs.com; linux-doc@vger.kernel.org; corbet@lwn.net; horms@kernel.org; dsahern@kernel.org; kuniyu@amazon.com; bpf@vger.kernel.org; netdev@vger.kernel.org; dave.taht@gmail.com; jhs@mojatatu.com; kuba@kernel.org; stephen@networkplumber.org; xiyou.wangcong@gmail.com; jiri@resnulli.us; davem@davemloft.net; edumazet@google.com; andrew+netdev@lunn.ch; donald.hunter@gmail.com; ast@fiberby.net; liuhangbin@gmail.com; shuah@kernel.org; linux-kselftest@vger.kernel.org; ij@kernel.org; ncardwell@google.com; Koen De Schepper (Nokia) koen.de_schepper@nokia-bell-labs.com; g.white g.white@cablelabs.com; ingemar.s.johansson@ericsson.com; mirja.kuehlewind@ericsson.com; cheshire@apple.com; rs.ietf@gmx.at; Jason_Livingood@comcast.com; vidhi_goel vidhi_goel@apple.com Subject: Re: [PATCH v7 net-next 14/15] tcp: accecn: try to fit AccECN option with SACK
CAUTION: This is an external email. Please be very careful when clicking links or opening attachments. See the URL nok.it/ext for additional information.
On 5/14/25 3:56 PM, chia-yu.chang@nokia-bell-labs.com wrote:
From: Ilpo Järvinen ij@kernel.org
As SACK blocks tend to eat all option space when there are many holes, it is useful to compromise on sending many SACK blocks in every ACK and try to fit AccECN option there by reduction the number of SACK blocks. But never go below two SACK blocks because of AccECN option.
As AccECN option is often not put to every ACK, the space hijack is usually only temporary.
Signed-off-by: Ilpo Järvinen ij@kernel.org Signed-off-by: Chia-Yu Chang chia-yu.chang@nokia-bell-labs.com
net/ipv4/tcp_output.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index b630923c4cef..d9d3cc8dbb5b 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -982,8 +982,21 @@ static int tcp_options_fit_accecn(struct tcp_out_options *opts, int required, opts->num_accecn_fields--; size -= TCPOLEN_ACCECN_PERFIELD; }
if (opts->num_accecn_fields < required)
if (opts->num_accecn_fields < required) {
if (opts->num_sack_blocks > 2) {
/* Try to fit the option by removing one SACK block */
opts->num_sack_blocks--;
size = tcp_options_fit_accecn(opts, required,
remaining +
TCPOLEN_SACK_PERBLOCK,
- max_combine_saving);
How deep is the recursion level, worst case? In any case please try to avoid recursion entirely. Possibly a 'goto' statement would help.
/P
Hi Paolo,
Thanks for the feedback, in this case up to 2 extra levels will be needed. And the recursion will be avoided in the next version.
BRs, Chia-Yu