]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
mptcp: pm: send ACK on non-stale subflows
authorMatthieu Baerts (NGI0) <matttbe@kernel.org>
Mon, 21 Oct 2024 15:14:03 +0000 (17:14 +0200)
committerJakub Kicinski <kuba@kernel.org>
Mon, 28 Oct 2024 22:55:45 +0000 (15:55 -0700)
If the subflow is considered as "staled", it is better to avoid it to
send an ACK carrying an ADD_ADDR or RM_ADDR. Another subflow, if any,
will then be selected.

Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20241021-net-next-mptcp-misc-6-13-v1-1-1ef02746504a@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/pm_netlink.c

index db586a5b3866f66a24431d7f2cab566f89102885..618289aac0ab7f558d55d8b2ebb00dc62fc72f88 100644 (file)
@@ -781,7 +781,7 @@ bool mptcp_pm_nl_is_init_remote_addr(struct mptcp_sock *msk,
 
 void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk)
 {
-       struct mptcp_subflow_context *subflow;
+       struct mptcp_subflow_context *subflow, *alt = NULL;
 
        msk_owned_by_me(msk);
        lockdep_assert_held(&msk->pm.lock);
@@ -792,10 +792,18 @@ void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk)
 
        mptcp_for_each_subflow(msk, subflow) {
                if (__mptcp_subflow_active(subflow)) {
-                       mptcp_pm_send_ack(msk, subflow, false, false);
-                       break;
+                       if (!subflow->stale) {
+                               mptcp_pm_send_ack(msk, subflow, false, false);
+                               return;
+                       }
+
+                       if (!alt)
+                               alt = subflow;
                }
        }
+
+       if (alt)
+               mptcp_pm_send_ack(msk, alt, false, false);
 }
 
 int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk,