Skip to content

Commit 141a433

Browse files
committed
tgupdate: merge t/DO-NOT-MERGE-mptcp-enabled-by-default base into t/DO-NOT-MERGE-mptcp-enabled-by-default
2 parents 69f17ed + 0166b9d commit 141a433

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

net/mptcp/pm_netlink.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1922,13 +1922,16 @@ static void mptcp_pm_nl_fullmesh(struct mptcp_sock *msk,
19221922
spin_unlock_bh(&msk->pm.lock);
19231923
}
19241924

1925-
static int mptcp_nl_set_flags(struct net *net,
1926-
struct mptcp_addr_info *addr,
1927-
u8 bkup, u8 changed)
1925+
static void mptcp_nl_set_flags(struct net *net, struct mptcp_addr_info *addr,
1926+
u8 flags, u8 changed)
19281927
{
1928+
u8 is_subflow = !!(flags & MPTCP_PM_ADDR_FLAG_SUBFLOW);
1929+
u8 bkup = !!(flags & MPTCP_PM_ADDR_FLAG_BACKUP);
19291930
long s_slot = 0, s_num = 0;
19301931
struct mptcp_sock *msk;
1931-
int ret = -EINVAL;
1932+
1933+
if (changed == MPTCP_PM_ADDR_FLAG_FULLMESH && !is_subflow)
1934+
return;
19321935

19331936
while ((msk = mptcp_token_iter_next(net, &s_slot, &s_num)) != NULL) {
19341937
struct sock *sk = (struct sock *)msk;
@@ -1938,8 +1941,9 @@ static int mptcp_nl_set_flags(struct net *net,
19381941

19391942
lock_sock(sk);
19401943
if (changed & MPTCP_PM_ADDR_FLAG_BACKUP)
1941-
ret = mptcp_pm_nl_mp_prio_send_ack(msk, addr, NULL, bkup);
1942-
if (changed & MPTCP_PM_ADDR_FLAG_FULLMESH)
1944+
mptcp_pm_nl_mp_prio_send_ack(msk, addr, NULL, bkup);
1945+
/* Subflows will only be recreated if the SUBFLOW flag is set */
1946+
if (is_subflow && (changed & MPTCP_PM_ADDR_FLAG_FULLMESH))
19431947
mptcp_pm_nl_fullmesh(msk, addr);
19441948
release_sock(sk);
19451949

@@ -1948,7 +1952,7 @@ static int mptcp_nl_set_flags(struct net *net,
19481952
cond_resched();
19491953
}
19501954

1951-
return ret;
1955+
return;
19521956
}
19531957

19541958
int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
@@ -1961,7 +1965,6 @@ int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
19611965
struct mptcp_pm_addr_entry *entry;
19621966
struct pm_nl_pernet *pernet;
19631967
u8 lookup_by_id = 0;
1964-
u8 bkup = 0;
19651968

19661969
pernet = pm_nl_get_pernet(net);
19671970

@@ -1974,9 +1977,6 @@ int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
19741977
}
19751978
}
19761979

1977-
if (local->flags & MPTCP_PM_ADDR_FLAG_BACKUP)
1978-
bkup = 1;
1979-
19801980
spin_lock_bh(&pernet->lock);
19811981
entry = lookup_by_id ? __lookup_addr_by_id(pernet, local->addr.id) :
19821982
__lookup_addr(pernet, &local->addr);
@@ -1998,7 +1998,7 @@ int mptcp_pm_nl_set_flags(struct mptcp_pm_addr_entry *local,
19981998
*local = *entry;
19991999
spin_unlock_bh(&pernet->lock);
20002000

2001-
mptcp_nl_set_flags(net, &local->addr, bkup, changed);
2001+
mptcp_nl_set_flags(net, &local->addr, entry->flags, changed);
20022002
return 0;
20032003
}
20042004

0 commit comments

Comments
 (0)