diff options
| author | Jakub Kicinski <[email protected]> | 2023-10-05 16:34:34 +0000 |
|---|---|---|
| committer | Jakub Kicinski <[email protected]> | 2023-10-05 16:34:34 +0000 |
| commit | c29d984580212f8a5e75b65c99a745f29511f83a (patch) | |
| tree | 5f43b7102a5f6d7a0b48ca6abbe091c8913a924e /net/mptcp/subflow.c | |
| parent | net: stmmac: remove unneeded stmmac_poll_controller (diff) | |
| parent | MAINTAINERS: update Matthieu's email address (diff) | |
| download | kernel-c29d984580212f8a5e75b65c99a745f29511f83a.tar.gz kernel-c29d984580212f8a5e75b65c99a745f29511f83a.zip | |
Merge branch 'mptcp-fixes-and-maintainer-email-update-for-v6-6'
Mat Martineau says:
====================
mptcp: Fixes and maintainer email update for v6.6
Patch 1 addresses a race condition in MPTCP "delegated actions"
infrastructure. Affects v5.19 and later.
Patch 2 removes an unnecessary restriction that did not allow additional
outgoing subflows using the local address of the initial MPTCP subflow.
v5.16 and later.
Patch 3 updates Matthieu's email address.
====================
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Jakub Kicinski <[email protected]>
Diffstat (limited to 'net/mptcp/subflow.c')
| -rw-r--r-- | net/mptcp/subflow.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 918c1a235790..9c1f8d1d63d2 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1956,9 +1956,15 @@ static void subflow_ulp_clone(const struct request_sock *req, static void tcp_release_cb_override(struct sock *ssk) { struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(ssk); + long status; - if (mptcp_subflow_has_delegated_action(subflow)) - mptcp_subflow_process_delegated(ssk); + /* process and clear all the pending actions, but leave the subflow into + * the napi queue. To respect locking, only the same CPU that originated + * the action can touch the list. mptcp_napi_poll will take care of it. + */ + status = set_mask_bits(&subflow->delegated_status, MPTCP_DELEGATE_ACTIONS_MASK, 0); + if (status) + mptcp_subflow_process_delegated(ssk, status); tcp_release_cb(ssk); } |
