Skip to content

Commit

Permalink
mptcp: pm: change to fullmesh only for 'subflow'
Browse files Browse the repository at this point in the history
If an entrypoint has no type -- so not 'subflow', 'signal', 'implicit' --
there are then no subflows to re-create from this local endpoint.

In this case, there is then no need to iterate over all connections to
do nothing. So stop early when this case is present.

Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
Message-Id: <[email protected]>
  • Loading branch information
matttbe authored and Patchew Applier committed Jan 17, 2025
1 parent 636e03e commit 0abf0f4
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions net/mptcp/pm_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -1923,11 +1923,16 @@ static void mptcp_pm_nl_fullmesh(struct mptcp_sock *msk,
}

static void mptcp_nl_set_flags(struct net *net, struct mptcp_addr_info *addr,
u8 bkup, u8 changed)
u8 flags, u8 changed)
{
u8 is_subflow = !!(flags & MPTCP_PM_ADDR_FLAG_SUBFLOW);
u8 bkup = !!(flags & MPTCP_PM_ADDR_FLAG_BACKUP);
long s_slot = 0, s_num = 0;
struct mptcp_sock *msk;

if (changed == MPTCP_PM_ADDR_FLAG_FULLMESH && !is_subflow)
return;

while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
struct sock *sk = (struct sock *)msk;

Expand All @@ -1937,7 +1942,7 @@ static void mptcp_nl_set_flags(struct net *net, struct mptcp_addr_info *addr,
lock_sock(sk);
if (changed & MPTCP_PM_ADDR_FLAG_BACKUP)
mptcp_pm_nl_mp_prio_send_ack(msk, addr, NULL, bkup);
if (changed & MPTCP_PM_ADDR_FLAG_FULLMESH)
if (is_subflow && (changed & MPTCP_PM_ADDR_FLAG_FULLMESH))
mptcp_pm_nl_fullmesh(msk, addr);
release_sock(sk);

Expand All @@ -1959,7 +1964,6 @@ int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
struct mptcp_pm_addr_entry *entry;
struct pm_nl_pernet *pernet;
u8 lookup_by_id = 0;
u8 bkup = 0;

pernet = pm_nl_get_pernet(net);

Expand All @@ -1972,9 +1976,6 @@ int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
}
}

if (local->flags & MPTCP_PM_ADDR_FLAG_BACKUP)
bkup = 1;

spin_lock_bh(&pernet->lock);
entry = lookup_by_id ? __lookup_addr_by_id(pernet, local->addr.id) :
__lookup_addr(pernet, &local->addr);
Expand All @@ -1996,7 +1997,7 @@ int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
*local = *entry;
spin_unlock_bh(&pernet->lock);

mptcp_nl_set_flags(net, &local->addr, bkup, changed);
mptcp_nl_set_flags(net, &local->addr, entry->flags, changed);
return 0;
}

Expand Down

0 comments on commit 0abf0f4

Please sign in to comment.