Skip to content

Commit 1f3a98f

Browse files
matttbeintel-lab-lkp
authored andcommitted
mptcp: pm: change to fullmesh only for 'subflow'
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]>
1 parent 21e0f2b commit 1f3a98f

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

net/mptcp/pm_netlink.c

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1923,11 +1923,16 @@ static void mptcp_pm_nl_fullmesh(struct mptcp_sock *msk,
19231923
}
19241924

19251925
static void mptcp_nl_set_flags(struct net *net, struct mptcp_addr_info *addr,
1926-
u8 bkup, u8 changed)
1926+
u8 flags, u8 changed)
19271927
{
1928+
u8 is_subflow = !!(flags & MPTCP_PM_ADDR_FLAG_SUBFLOW);
1929+
u8 bkup = !!(flags & MPTCP_PM_ADDR_FLAG_BACKUP);
19281930
long s_slot = 0, s_num = 0;
19291931
struct mptcp_sock *msk;
19301932

1933+
if (changed == MPTCP_PM_ADDR_FLAG_FULLMESH && !is_subflow)
1934+
return;
1935+
19311936
while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
19321937
struct sock *sk = (struct sock *)msk;
19331938

@@ -1937,7 +1942,7 @@ static void mptcp_nl_set_flags(struct net *net, struct mptcp_addr_info *addr,
19371942
lock_sock(sk);
19381943
if (changed & MPTCP_PM_ADDR_FLAG_BACKUP)
19391944
mptcp_pm_nl_mp_prio_send_ack(msk, addr, NULL, bkup);
1940-
if (changed & MPTCP_PM_ADDR_FLAG_FULLMESH)
1945+
if (is_subflow && (changed & MPTCP_PM_ADDR_FLAG_FULLMESH))
19411946
mptcp_pm_nl_fullmesh(msk, addr);
19421947
release_sock(sk);
19431948

@@ -1959,7 +1964,6 @@ int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
19591964
struct mptcp_pm_addr_entry *entry;
19601965
struct pm_nl_pernet *pernet;
19611966
u8 lookup_by_id = 0;
1962-
u8 bkup = 0;
19631967

19641968
pernet = pm_nl_get_pernet(net);
19651969

@@ -1972,9 +1976,6 @@ int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
19721976
}
19731977
}
19741978

1975-
if (local->flags & MPTCP_PM_ADDR_FLAG_BACKUP)
1976-
bkup = 1;
1977-
19781979
spin_lock_bh(&pernet->lock);
19791980
entry = lookup_by_id ? __lookup_addr_by_id(pernet, local->addr.id) :
19801981
__lookup_addr(pernet, &local->addr);
@@ -1996,7 +1997,7 @@ int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
19961997
*local = *entry;
19971998
spin_unlock_bh(&pernet->lock);
19981999

1999-
mptcp_nl_set_flags(net, &local->addr, bkup, changed);
2000+
mptcp_nl_set_flags(net, &local->addr, entry->flags, changed);
20002001
return 0;
20012002
}
20022003

0 commit comments

Comments
 (0)