Skip to content

Commit 6207656

Browse files
matttbeintel-lab-lkp
authored andcommitted
mptcp: pm: worker: split in-kernel and common tasks
To make it clear what actions are in-kernel PM specific and which ones are not and done for all PMs, e.g. sending ADD_ADDR and close associated subflows when a RM_ADDR is received. Signed-off-by: Matthieu Baerts (NGI0) <[email protected]>
1 parent f668807 commit 6207656

File tree

3 files changed

+28
-19
lines changed

3 files changed

+28
-19
lines changed

net/mptcp/pm.c

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

602+
void mptcp_pm_worker(struct mptcp_sock *msk)
603+
{
604+
struct mptcp_pm_data *pm = &msk->pm;
605+
606+
msk_owned_by_me(msk);
607+
608+
if (!(pm->status & MPTCP_PM_WORK_MASK))
609+
return;
610+
611+
spin_lock_bh(&msk->pm.lock);
612+
613+
pr_debug("msk=%p status=%x\n", msk, pm->status);
614+
if (pm->status & BIT(MPTCP_PM_ADD_ADDR_SEND_ACK)) {
615+
pm->status &= ~BIT(MPTCP_PM_ADD_ADDR_SEND_ACK);
616+
mptcp_pm_addr_send_ack(msk);
617+
}
618+
if (pm->status & BIT(MPTCP_PM_RM_ADDR_RECEIVED)) {
619+
pm->status &= ~BIT(MPTCP_PM_RM_ADDR_RECEIVED);
620+
mptcp_pm_rm_addr_recv(msk);
621+
}
622+
__mptcp_pm_kernel_worker(msk);
623+
624+
spin_unlock_bh(&msk->pm.lock);
625+
}
626+
602627
void mptcp_pm_destroy(struct mptcp_sock *msk)
603628
{
604629
mptcp_pm_free_anno_list(msk);

net/mptcp/pm_netlink.c

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -924,30 +924,15 @@ static void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk,
924924
mptcp_pm_rm_addr_or_subflow(msk, rm_list, MPTCP_MIB_RMSUBFLOW);
925925
}
926926

927-
void mptcp_pm_worker(struct mptcp_sock *msk)
927+
/* Called under PM lock */
928+
void __mptcp_pm_kernel_worker(struct mptcp_sock *msk)
928929
{
929930
struct mptcp_pm_data *pm = &msk->pm;
930931

931-
msk_owned_by_me(msk);
932-
933-
if (!(pm->status & MPTCP_PM_WORK_MASK))
934-
return;
935-
936-
spin_lock_bh(&msk->pm.lock);
937-
938-
pr_debug("msk=%p status=%x\n", msk, pm->status);
939932
if (pm->status & BIT(MPTCP_PM_ADD_ADDR_RECEIVED)) {
940933
pm->status &= ~BIT(MPTCP_PM_ADD_ADDR_RECEIVED);
941934
mptcp_pm_nl_add_addr_received(msk);
942935
}
943-
if (pm->status & BIT(MPTCP_PM_ADD_ADDR_SEND_ACK)) {
944-
pm->status &= ~BIT(MPTCP_PM_ADD_ADDR_SEND_ACK);
945-
mptcp_pm_addr_send_ack(msk);
946-
}
947-
if (pm->status & BIT(MPTCP_PM_RM_ADDR_RECEIVED)) {
948-
pm->status &= ~BIT(MPTCP_PM_RM_ADDR_RECEIVED);
949-
mptcp_pm_rm_addr_recv(msk);
950-
}
951936
if (pm->status & BIT(MPTCP_PM_ESTABLISHED)) {
952937
pm->status &= ~BIT(MPTCP_PM_ESTABLISHED);
953938
mptcp_pm_nl_fully_established(msk);
@@ -956,8 +941,6 @@ void mptcp_pm_worker(struct mptcp_sock *msk)
956941
pm->status &= ~BIT(MPTCP_PM_SUBFLOW_ESTABLISHED);
957942
mptcp_pm_nl_subflow_established(msk);
958943
}
959-
960-
spin_unlock_bh(&msk->pm.lock);
961944
}
962945

963946
static bool address_use_port(struct mptcp_pm_addr_entry *entry)

net/mptcp/protocol.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1154,6 +1154,7 @@ static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflo
11541154

11551155
void __init mptcp_pm_nl_init(void);
11561156
void mptcp_pm_worker(struct mptcp_sock *msk);
1157+
void __mptcp_pm_kernel_worker(struct mptcp_sock *msk);
11571158
unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk);
11581159
unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk);
11591160
unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk);

0 commit comments

Comments
 (0)