]> Git Repo - linux.git/commitdiff
mptcp: pm: re-using ID of unused flushed subflows
authorMatthieu Baerts (NGI0) <[email protected]>
Mon, 19 Aug 2024 19:45:23 +0000 (21:45 +0200)
committerJakub Kicinski <[email protected]>
Wed, 21 Aug 2024 00:40:12 +0000 (17:40 -0700)
If no subflows are attached to the 'subflow' endpoints that are being
flushed, the corresponding addr IDs will not be marked as available
again.

Mark all ID as being available when flushing all the 'subflow'
endpoints, and reset local_addr_used counter to cover these cases.

Note that mptcp_pm_remove_addrs_and_subflows() helper is only called for
flushing operations, not to remove a specific set of addresses and
subflows.

Fixes: 06faa2271034 ("mptcp: remove multi addresses and subflows in PM")
Cc: [email protected]
Reviewed-by: Mat Martineau <[email protected]>
Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
net/mptcp/pm_netlink.c

index 8b232a210a066e0c67c3277e95dd6a41e0ee2a70..2c26696b820e8acd2cae510538a8be5029d0e94f 100644 (file)
@@ -1623,8 +1623,15 @@ static void mptcp_pm_remove_addrs_and_subflows(struct mptcp_sock *msk,
                mptcp_pm_remove_addr(msk, &alist);
                spin_unlock_bh(&msk->pm.lock);
        }
+
        if (slist.nr)
                mptcp_pm_remove_subflow(msk, &slist);
+
+       /* Reset counters: maybe some subflows have been removed before */
+       spin_lock_bh(&msk->pm.lock);
+       bitmap_fill(msk->pm.id_avail_bitmap, MPTCP_PM_MAX_ADDR_ID + 1);
+       msk->pm.local_addr_used = 0;
+       spin_unlock_bh(&msk->pm.lock);
 }
 
 static void mptcp_nl_remove_addrs_list(struct net *net,
This page took 0.051257 seconds and 4 git commands to generate.