Skip to content

Commit a94e916

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 127d0ff commit a94e916

File tree

3 files changed

+30
-20
lines changed

3 files changed

+30
-20
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: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -912,7 +912,7 @@ static void mptcp_pm_rm_addr_or_subflow(struct mptcp_sock *msk,
912912
}
913913
}
914914

915-
static void mptcp_pm_rm_addr_recv(struct mptcp_sock *msk)
915+
void mptcp_pm_rm_addr_recv(struct mptcp_sock *msk)
916916
{
917917
mptcp_pm_rm_addr_or_subflow(msk, &msk->pm.rm_list_rx, MPTCP_MIB_RMADDR);
918918
}
@@ -923,30 +923,15 @@ static void mptcp_pm_rm_subflow(struct mptcp_sock *msk,
923923
mptcp_pm_rm_addr_or_subflow(msk, rm_list, MPTCP_MIB_RMSUBFLOW);
924924
}
925925

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

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

962945
static bool address_use_port(struct mptcp_pm_addr_entry *entry)

net/mptcp/protocol.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,7 @@ void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk);
10151015
bool mptcp_pm_is_init_remote_addr(struct mptcp_sock *msk,
10161016
const struct mptcp_addr_info *remote);
10171017
void mptcp_pm_addr_send_ack(struct mptcp_sock *msk);
1018+
void mptcp_pm_rm_addr_recv(struct mptcp_sock *msk);
10181019
void mptcp_pm_rm_addr_received(struct mptcp_sock *msk,
10191020
const struct mptcp_rm_list *rm_list);
10201021
void mptcp_pm_mp_prio_received(struct sock *sk, u8 bkup);
@@ -1154,6 +1155,7 @@ static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflo
11541155

11551156
void __init mptcp_pm_nl_init(void);
11561157
void mptcp_pm_worker(struct mptcp_sock *msk);
1158+
void __mptcp_pm_kernel_worker(struct mptcp_sock *msk);
11571159
unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk);
11581160
unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk);
11591161
unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk);

0 commit comments

Comments
 (0)