After the previous commits the PM worker can't race anymore
with the unaccepted subflow close and disposal, as the msk
keeps a reference to such subflow.
We can remove the now irrelevant and confusing checks explicitly
preventing the mentioned race.
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
net/mptcp/options.c | 7 +------
net/mptcp/subflow.c | 7 +++----
2 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/net/mptcp/options.c b/net/mptcp/options.c
index 99c4f9e9bb90..91d5b59540e9 100644
--- a/net/mptcp/options.c
+++ b/net/mptcp/options.c
@@ -988,12 +988,7 @@ static bool check_fully_established(struct mptcp_sock *msk, struct sock *ssk,
mptcp_subflow_fully_established(subflow, mp_opt);
check_notify:
- /* if the subflow is not already linked into the conn_list, we can't
- * notify the PM: this subflow is still on the listener queue
- * and the PM possibly acquiring the subflow lock could race with
- * the listener close
- */
- if (likely(subflow->pm_notified) || list_empty(&subflow->node))
+ if (likely(subflow->pm_notified))
return true;
subflow->pm_notified = 1;
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index 7b91dc57049e..6f198d6e1b22 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -1933,11 +1933,10 @@ static void subflow_ulp_release(struct sock *ssk)
sk = ctx->conn;
if (sk) {
- /* if the msk has been orphaned, keep the ctx
- * alive, will be freed by __mptcp_close_ssk(),
- * when the subflow is still unaccepted
+ /* if the subflow has been closed by the TCP stack, keep
+ * the ctx alive, will be freed by __mptcp_close_ssk()
*/
- release = ctx->disposable || list_empty(&ctx->node);
+ release = ctx->disposable;
sock_put(sk);
}
--
2.39.0