mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
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. The behavioural is changed a bit: MPTCP_PM_ADD_ADDR_RECEIVED is now treated after MPTCP_PM_ADD_ADDR_SEND_ACK and MPTCP_PM_RM_ADDR_RECEIVED, but that should not change anything in practice. Reviewed-by: Geliang Tang <geliang@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20250307-net-next-mptcp-pm-reorg-v1-10-abef20ada03b@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
a17336b2b2
commit
a49eb8ae95
@ -599,6 +599,31 @@ bool mptcp_pm_addr_families_match(const struct sock *sk,
|
||||
#endif
|
||||
}
|
||||
|
||||
void mptcp_pm_worker(struct mptcp_sock *msk)
|
||||
{
|
||||
struct mptcp_pm_data *pm = &msk->pm;
|
||||
|
||||
msk_owned_by_me(msk);
|
||||
|
||||
if (!(pm->status & MPTCP_PM_WORK_MASK))
|
||||
return;
|
||||
|
||||
spin_lock_bh(&msk->pm.lock);
|
||||
|
||||
pr_debug("msk=%p status=%x\n", msk, pm->status);
|
||||
if (pm->status & BIT(MPTCP_PM_ADD_ADDR_SEND_ACK)) {
|
||||
pm->status &= ~BIT(MPTCP_PM_ADD_ADDR_SEND_ACK);
|
||||
mptcp_pm_addr_send_ack(msk);
|
||||
}
|
||||
if (pm->status & BIT(MPTCP_PM_RM_ADDR_RECEIVED)) {
|
||||
pm->status &= ~BIT(MPTCP_PM_RM_ADDR_RECEIVED);
|
||||
mptcp_pm_rm_addr_recv(msk);
|
||||
}
|
||||
__mptcp_pm_kernel_worker(msk);
|
||||
|
||||
spin_unlock_bh(&msk->pm.lock);
|
||||
}
|
||||
|
||||
void mptcp_pm_destroy(struct mptcp_sock *msk)
|
||||
{
|
||||
mptcp_pm_free_anno_list(msk);
|
||||
|
@ -912,7 +912,7 @@ static void mptcp_pm_rm_addr_or_subflow(struct mptcp_sock *msk,
|
||||
}
|
||||
}
|
||||
|
||||
static void mptcp_pm_rm_addr_recv(struct mptcp_sock *msk)
|
||||
void mptcp_pm_rm_addr_recv(struct mptcp_sock *msk)
|
||||
{
|
||||
mptcp_pm_rm_addr_or_subflow(msk, &msk->pm.rm_list_rx, MPTCP_MIB_RMADDR);
|
||||
}
|
||||
@ -923,30 +923,15 @@ static void mptcp_pm_rm_subflow(struct mptcp_sock *msk,
|
||||
mptcp_pm_rm_addr_or_subflow(msk, rm_list, MPTCP_MIB_RMSUBFLOW);
|
||||
}
|
||||
|
||||
void mptcp_pm_worker(struct mptcp_sock *msk)
|
||||
/* Called under PM lock */
|
||||
void __mptcp_pm_kernel_worker(struct mptcp_sock *msk)
|
||||
{
|
||||
struct mptcp_pm_data *pm = &msk->pm;
|
||||
|
||||
msk_owned_by_me(msk);
|
||||
|
||||
if (!(pm->status & MPTCP_PM_WORK_MASK))
|
||||
return;
|
||||
|
||||
spin_lock_bh(&msk->pm.lock);
|
||||
|
||||
pr_debug("msk=%p status=%x\n", msk, pm->status);
|
||||
if (pm->status & BIT(MPTCP_PM_ADD_ADDR_RECEIVED)) {
|
||||
pm->status &= ~BIT(MPTCP_PM_ADD_ADDR_RECEIVED);
|
||||
mptcp_pm_nl_add_addr_received(msk);
|
||||
}
|
||||
if (pm->status & BIT(MPTCP_PM_ADD_ADDR_SEND_ACK)) {
|
||||
pm->status &= ~BIT(MPTCP_PM_ADD_ADDR_SEND_ACK);
|
||||
mptcp_pm_addr_send_ack(msk);
|
||||
}
|
||||
if (pm->status & BIT(MPTCP_PM_RM_ADDR_RECEIVED)) {
|
||||
pm->status &= ~BIT(MPTCP_PM_RM_ADDR_RECEIVED);
|
||||
mptcp_pm_rm_addr_recv(msk);
|
||||
}
|
||||
if (pm->status & BIT(MPTCP_PM_ESTABLISHED)) {
|
||||
pm->status &= ~BIT(MPTCP_PM_ESTABLISHED);
|
||||
mptcp_pm_nl_fully_established(msk);
|
||||
@ -955,8 +940,6 @@ void mptcp_pm_worker(struct mptcp_sock *msk)
|
||||
pm->status &= ~BIT(MPTCP_PM_SUBFLOW_ESTABLISHED);
|
||||
mptcp_pm_nl_subflow_established(msk);
|
||||
}
|
||||
|
||||
spin_unlock_bh(&msk->pm.lock);
|
||||
}
|
||||
|
||||
static bool address_use_port(struct mptcp_pm_addr_entry *entry)
|
||||
|
@ -1010,6 +1010,7 @@ void mptcp_pm_add_addr_send_ack(struct mptcp_sock *msk);
|
||||
bool mptcp_pm_is_init_remote_addr(struct mptcp_sock *msk,
|
||||
const struct mptcp_addr_info *remote);
|
||||
void mptcp_pm_addr_send_ack(struct mptcp_sock *msk);
|
||||
void mptcp_pm_rm_addr_recv(struct mptcp_sock *msk);
|
||||
void mptcp_pm_rm_addr_received(struct mptcp_sock *msk,
|
||||
const struct mptcp_rm_list *rm_list);
|
||||
void mptcp_pm_mp_prio_received(struct sock *sk, u8 bkup);
|
||||
@ -1149,6 +1150,7 @@ static inline u8 subflow_get_local_id(const struct mptcp_subflow_context *subflo
|
||||
|
||||
void __init mptcp_pm_nl_init(void);
|
||||
void mptcp_pm_worker(struct mptcp_sock *msk);
|
||||
void __mptcp_pm_kernel_worker(struct mptcp_sock *msk);
|
||||
unsigned int mptcp_pm_get_add_addr_signal_max(const struct mptcp_sock *msk);
|
||||
unsigned int mptcp_pm_get_add_addr_accept_max(const struct mptcp_sock *msk);
|
||||
unsigned int mptcp_pm_get_subflows_max(const struct mptcp_sock *msk);
|
||||
|
Loading…
Reference in New Issue
Block a user