Currently the subflow error report callback unconditionally
propagates the fallback subflow status to the owning msk.
That is not needed as there is a great deal of infrastructure
trying to propagate correctly the fallback subflow status to
the owning mptcp socket, e.g. via mptcp_subflow_eof() and
subflow_sched_work_if_closed().
And in some circumstances - specifically if the msk is already
orphaned - it prevents the code from correctly tracking the msk
moving to the TCP_CLOSE state and doing the appropriate
cleanup.
All the above causes increasing memory usage over time and
sporadic self-tests failures.
Address the issue simply removing the unneeded state update.
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/339
Fixes: 15cc10453398 ("mptcp: deliver ssk errors to msk")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
net/mptcp/subflow.c | 1 -
1 file changed, 1 deletion(-)
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index beaec843f5ca..5f952d0e06d4 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -1410,7 +1410,6 @@ void __mptcp_error_report(struct sock *sk)
if (sk->sk_state != TCP_SYN_SENT && !__mptcp_check_fallback(msk))
continue;
- inet_sk_state_store(sk, inet_sk_state_load(ssk));
sk->sk_err = -err;
/* This barrier is coupled with smp_rmb() in mptcp_poll() */
--
2.39.1