]> www.infradead.org Git - users/hch/misc.git/commitdiff
mptcp: pm: exit early with ADD_ADDR echo if possible
authorMatthieu Baerts (NGI0) <matttbe@kernel.org>
Fri, 28 Feb 2025 14:38:39 +0000 (15:38 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 5 Mar 2025 00:57:38 +0000 (16:57 -0800)
When the userspace PM is used, or when the in-kernel limits are reached,
there will be no need to schedule the PM worker to signal new addresses.
That corresponds to pm->work_pending set to 0.

In this case, an early exit can be done in mptcp_pm_add_addr_echoed()
not to hold the PM lock, and iterate over the announced addresses list,
not to schedule the worker anyway in this case. This is similar to what
is done when a connection or a subflow has been established.

Reviewed-by: Geliang Tang <geliang@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20250228-net-next-mptcp-coverage-small-opti-v1-5-f933c4275676@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/mptcp/pm.c

index 16cacce6c10fe86467aa7ef8e588f9f535b586fb..6c8cadf84f31f4c7dcc38b787beda048d5362dc8 100644 (file)
@@ -251,6 +251,9 @@ void mptcp_pm_add_addr_echoed(struct mptcp_sock *msk,
 
        pr_debug("msk=%p\n", msk);
 
+       if (!READ_ONCE(pm->work_pending))
+               return;
+
        spin_lock_bh(&pm->lock);
 
        if (mptcp_lookup_anno_list_by_saddr(msk, addr) && READ_ONCE(pm->work_pending))