FAILED: patch "[PATCH] mptcp: move __mptcp_error_report in protocol.c" failed to apply to 6.1-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x d5fbeff1ab812b6c473b6924bee8748469462e2c
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023100420-spirits-clumsy-63d9@gregkh' --subject-prefix 'PATCH 6.1.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From d5fbeff1ab812b6c473b6924bee8748469462e2c Mon Sep 17 00:00:00 2001
From: Paolo Abeni <[email protected]>
Date: Sat, 16 Sep 2023 12:52:46 +0200
Subject: [PATCH] mptcp: move __mptcp_error_report in protocol.c
This will simplify the next patch ("mptcp: process pending subflow error on close").
No functional change intended.
net/mptcp/protocol.c +36 -0
@@ -770,6 +770,42 @@ static bool __mptcp_ofo_queue(struct mptcp_sock *msk)return moved; } +void __mptcp_error_report (struct sock *sk) +{ +struct mptcp_subflow_context *subflow; +struct mptcp_sock *msk =mptcp_sk (sk); + +mptcp_for_each_subflow (msk, subflow) { +struct sock *ssk =mptcp_subflow_tcp_sock (subflow); +int err =sock_error (ssk); +int ssk_state; + +if (!err) +continue ; + +/* only propagate errors on fallen-back sockets or +* on MPC connect +*/ +if (sk->sk_state !=TCP_SYN_SENT && !__mptcp_check_fallback (msk)) +continue ; + +/* We need to propagate only transition to CLOSE state. +* Orphaned socket will see such state change via +* subflow_sched_work_if_closed() and that path will properly +* destroy the msk as needed. +*/ + ssk_state =inet_sk_state_load (ssk); +if (ssk_state ==TCP_CLOSE && !sock_flag (sk,SOCK_DEAD )) +inet_sk_state_store (sk, ssk_state); +WRITE_ONCE (sk->sk_err, -err); + +/* This barrier is coupled with smp_rmb() in mptcp_poll() */ +smp_wmb (); +sk_error_report (sk); +break ; + } +} +/* In most cases we will be able to lock the mptcp socket. If its already * owned, we need to defer to the work queue to avoid ABBA deadlock. */
net/mptcp/subflow.c +0 -36
@@ -1362,42 +1362,6 @@ void mptcp_space(const struct sock *ssk, int *space, int *full_space) *full_space =mptcp_win_from_space (sk,READ_ONCE (sk->sk_rcvbuf)); } -void __mptcp_error_report (struct sock *sk) -{ -struct mptcp_subflow_context *subflow; -struct mptcp_sock *msk =mptcp_sk (sk); - -mptcp_for_each_subflow (msk, subflow) { -struct sock *ssk =mptcp_subflow_tcp_sock (subflow); -int err =sock_error (ssk); -int ssk_state; - -if (!err) -continue ; - -/* only propagate errors on fallen-back sockets or -* on MPC connect -*/ -if (sk->sk_state !=TCP_SYN_SENT && !__mptcp_check_fallback (msk)) -continue ; - -/* We need to propagate only transition to CLOSE state. -* Orphaned socket will see such state change via -* subflow_sched_work_if_closed() and that path will properly -* destroy the msk as needed. -*/ - ssk_state =inet_sk_state_load (ssk); -if (ssk_state ==TCP_CLOSE && !sock_flag (sk,SOCK_DEAD )) -inet_sk_state_store (sk, ssk_state); -WRITE_ONCE (sk->sk_err, -err); - -/* This barrier is coupled with smp_rmb() in mptcp_poll() */ -smp_wmb (); -sk_error_report (sk); -break ; - } -} -static void subflow_error_report (struct sock *ssk) {struct sock *sk =mptcp_subflow_ctx (ssk)->conn;