Taking the first one on the list doesn't work in some cases, e.g. if the
initial subflow is being removed. Pick another one instead of not
sending anything.

Fixes: 84dfe3677a6f ("mptcp: send out dedicated ADD_ADDR packet")
Cc: sta...@vger.kernel.org
Reviewed-by: Mat Martineau <martin...@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matt...@kernel.org>
---
 net/mptcp/pm_netlink.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
index 42d4e7b5f65d..ed2205ef7208 100644
--- a/net/mptcp/pm_netlink.c
+++ b/net/mptcp/pm_netlink.c
@@ -765,9 +765,12 @@ void mptcp_pm_nl_addr_send_ack(struct mptcp_sock *msk)
            !mptcp_pm_should_rm_signal(msk))
                return;
 
-       subflow = list_first_entry_or_null(&msk->conn_list, typeof(*subflow), 
node);
-       if (subflow)
-               mptcp_pm_send_ack(msk, subflow, false, false);
+       mptcp_for_each_subflow(msk, subflow) {
+               if (__mptcp_subflow_active(subflow)) {
+                       mptcp_pm_send_ack(msk, subflow, false, false);
+                       break;
+               }
+       }
 }
 
 int mptcp_pm_nl_mp_prio_send_ack(struct mptcp_sock *msk,

-- 
2.45.2


Reply via email to