Skip to content

Commit f668807

Browse files
matttbeintel-lab-lkp
authored andcommitted
mptcp: pm: avoid calling PM specific code from core
When destroying an MPTCP socket, some userspace PM specific code was called from mptcp_destroy_common() in protocol.c. That feels wrong, and it is the only case. Instead, the core now calls mptcp_pm_destroy() from pm.c which is now in charge of cleaning the announced addresses list, and ask the different PMs to do extra cleaning if needed, e.g. the userspace PM, if used, will clean the local addresses list. While at it, the userspace PM specific helper has been prefixed with 'mptcp_userspace_pm_' like the other ones. No behavioural changes intended. Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
1 parent 8f867d5 commit f668807

File tree

4 files changed

+12
-7
lines changed

4 files changed

+12
-7
lines changed

net/mptcp/pm.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,14 @@ bool mptcp_pm_addr_families_match(const struct sock *sk,
599599
#endif
600600
}
601601

602+
void mptcp_pm_destroy(struct mptcp_sock *msk)
603+
{
604+
mptcp_pm_free_anno_list(msk);
605+
606+
if (mptcp_pm_is_userspace(msk))
607+
mptcp_userspace_pm_free_local_addr_list(msk);
608+
}
609+
602610
void mptcp_pm_data_reset(struct mptcp_sock *msk)
603611
{
604612
u8 pm_type = mptcp_get_pm_type(sock_net((struct sock *)msk));

net/mptcp/pm_userspace.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,12 @@
1212
list_for_each_entry(__entry, \
1313
&((__msk)->pm.userspace_pm_local_addr_list), list)
1414

15-
void mptcp_free_local_addr_list(struct mptcp_sock *msk)
15+
void mptcp_userspace_pm_free_local_addr_list(struct mptcp_sock *msk)
1616
{
1717
struct mptcp_pm_addr_entry *entry, *tmp;
1818
struct sock *sk = (struct sock *)msk;
1919
LIST_HEAD(free_list);
2020

21-
if (!mptcp_pm_is_userspace(msk))
22-
return;
23-
2421
spin_lock_bh(&msk->pm.lock);
2522
list_splice_init(&msk->pm.userspace_pm_local_addr_list, &free_list);
2623
spin_unlock_bh(&msk->pm.lock);

net/mptcp/protocol.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3305,8 +3305,7 @@ void mptcp_destroy_common(struct mptcp_sock *msk, unsigned int flags)
33053305
* inet_sock_destruct() will dispose it
33063306
*/
33073307
mptcp_token_destroy(msk);
3308-
mptcp_pm_free_anno_list(msk);
3309-
mptcp_free_local_addr_list(msk);
3308+
mptcp_pm_destroy(msk);
33103309
}
33113310

33123311
static void mptcp_destroy(struct sock *sk)

net/mptcp/protocol.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -988,6 +988,7 @@ __sum16 __mptcp_make_csum(u64 data_seq, u32 subflow_seq, u16 data_len, __wsum su
988988
void __init mptcp_pm_init(void);
989989
void mptcp_pm_data_init(struct mptcp_sock *msk);
990990
void mptcp_pm_data_reset(struct mptcp_sock *msk);
991+
void mptcp_pm_destroy(struct mptcp_sock *msk);
991992
int mptcp_pm_parse_addr(struct nlattr *attr, struct genl_info *info,
992993
struct mptcp_addr_info *addr);
993994
int mptcp_pm_parse_entry(struct nlattr *attr, struct genl_info *info,
@@ -1047,7 +1048,7 @@ int mptcp_pm_remove_addr(struct mptcp_sock *msk, const struct mptcp_rm_list *rm_
10471048
void mptcp_pm_remove_addr_entry(struct mptcp_sock *msk,
10481049
struct mptcp_pm_addr_entry *entry);
10491050

1050-
void mptcp_free_local_addr_list(struct mptcp_sock *msk);
1051+
void mptcp_userspace_pm_free_local_addr_list(struct mptcp_sock *msk);
10511052

10521053
void mptcp_event(enum mptcp_event_type type, const struct mptcp_sock *msk,
10531054
const struct sock *ssk, gfp_t gfp);

0 commit comments

Comments
 (0)