From bab6f91c0f7c16f3a66869a89871eeec28bf8a17 Mon Sep 17 00:00:00 2001 From: Jiri Slaby Date: Apr 20 2023 11:01:03 +0000 Subject: mptcp: use mptcp_schedule_work instead of open-coding it (bsc#1012628). --- diff --git a/patches.kernel.org/6.2.12-122-mptcp-use-mptcp_schedule_work-instead-of-open-.patch b/patches.kernel.org/6.2.12-122-mptcp-use-mptcp_schedule_work-instead-of-open-.patch new file mode 100644 index 0000000..f45457e --- /dev/null +++ b/patches.kernel.org/6.2.12-122-mptcp-use-mptcp_schedule_work-instead-of-open-.patch @@ -0,0 +1,94 @@ +From: Paolo Abeni +Date: Tue, 11 Apr 2023 22:42:09 +0200 +Subject: [PATCH] mptcp: use mptcp_schedule_work instead of open-coding it +References: bsc#1012628 +Patch-mainline: 6.2.12 +Git-commit: a5cb752b125766524c921faab1a45cc96065b0a7 + +commit a5cb752b125766524c921faab1a45cc96065b0a7 upstream. + +Beyond reducing code duplication this also avoids scheduling +the mptcp_worker on a closed socket on some edge scenarios. + +The addressed issue is actually older than the blamed commit +below, but this fix needs it as a pre-requisite. + +Fixes: ba8f48f7a4d7 ("mptcp: introduce mptcp_schedule_work") +Cc: stable@vger.kernel.org +Signed-off-by: Paolo Abeni +Reviewed-by: Matthieu Baerts +Signed-off-by: Matthieu Baerts +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Jiri Slaby +--- + net/mptcp/options.c | 5 ++--- + net/mptcp/subflow.c | 18 ++++++------------ + 2 files changed, 8 insertions(+), 15 deletions(-) + +diff --git a/net/mptcp/options.c b/net/mptcp/options.c +index 5ded85e2..3872eadb 100644 +--- a/net/mptcp/options.c ++++ b/net/mptcp/options.c +@@ -1192,9 +1192,8 @@ bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb) + */ + if (TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq) { + if (mp_opt.data_fin && mp_opt.data_len == 1 && +- mptcp_update_rcv_data_fin(msk, mp_opt.data_seq, mp_opt.dsn64) && +- schedule_work(&msk->work)) +- sock_hold(subflow->conn); ++ mptcp_update_rcv_data_fin(msk, mp_opt.data_seq, mp_opt.dsn64)) ++ mptcp_schedule_work((struct sock *)msk); + + return true; + } +diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c +index 8f6e48e5..dbc02c2c 100644 +--- a/net/mptcp/subflow.c ++++ b/net/mptcp/subflow.c +@@ -407,9 +407,8 @@ void mptcp_subflow_reset(struct sock *ssk) + + tcp_send_active_reset(ssk, GFP_ATOMIC); + tcp_done(ssk); +- if (!test_and_set_bit(MPTCP_WORK_CLOSE_SUBFLOW, &mptcp_sk(sk)->flags) && +- schedule_work(&mptcp_sk(sk)->work)) +- return; /* worker will put sk for us */ ++ if (!test_and_set_bit(MPTCP_WORK_CLOSE_SUBFLOW, &mptcp_sk(sk)->flags)) ++ mptcp_schedule_work(sk); + + sock_put(sk); + } +@@ -1117,8 +1116,8 @@ static enum mapping_status get_mapping_status(struct sock *ssk, + skb_ext_del(skb, SKB_EXT_MPTCP); + return MAPPING_OK; + } else { +- if (updated && schedule_work(&msk->work)) +- sock_hold((struct sock *)msk); ++ if (updated) ++ mptcp_schedule_work((struct sock *)msk); + + return MAPPING_DATA_FIN; + } +@@ -1221,17 +1220,12 @@ static void mptcp_subflow_discard_data(struct sock *ssk, struct sk_buff *skb, + /* sched mptcp worker to remove the subflow if no more data is pending */ + static void subflow_sched_work_if_closed(struct mptcp_sock *msk, struct sock *ssk) + { +- struct sock *sk = (struct sock *)msk; +- + if (likely(ssk->sk_state != TCP_CLOSE)) + return; + + if (skb_queue_empty(&ssk->sk_receive_queue) && +- !test_and_set_bit(MPTCP_WORK_CLOSE_SUBFLOW, &msk->flags)) { +- sock_hold(sk); +- if (!schedule_work(&msk->work)) +- sock_put(sk); +- } ++ !test_and_set_bit(MPTCP_WORK_CLOSE_SUBFLOW, &msk->flags)) ++ mptcp_schedule_work((struct sock *)msk); + } + + static bool subflow_can_fallback(struct mptcp_subflow_context *subflow) +-- +2.35.3 + diff --git a/series.conf b/series.conf index d952e77..b3d7a5a 100644 --- a/series.conf +++ b/series.conf @@ -2349,6 +2349,7 @@ patches.kernel.org/6.2.12-119-cgroup-cpuset-Add-cpuset_can_fork-and-cpuset_c.patch patches.kernel.org/6.2.12-120-drm-amd-pm-correct-SMU13.0.7-pstate-profiling-.patch patches.kernel.org/6.2.12-121-drm-amd-pm-correct-SMU13.0.7-max-shader-clock-.patch + patches.kernel.org/6.2.12-122-mptcp-use-mptcp_schedule_work-instead-of-open-.patch ######################################################## # Build fixes that apply to the vanilla kernel too.