[PATCH mptcp-next v6 07/13] mptcp: don't delegate sending repeatedly

Geliang Tang posted 13 patches 3 years, 4 months ago
Maintainers: Mat Martineau <mathew.j.martineau@linux.intel.com>, Matthieu Baerts <matthieu.baerts@tessares.net>, "David S. Miller" <davem@davemloft.net>, Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>, Andrii Nakryiko <andrii@kernel.org>, Mykola Lysenko <mykolal@fb.com>, Alexei Starovoitov <ast@kernel.org>, Daniel Borkmann <daniel@iogearbox.net>, Martin KaFai Lau <martin.lau@linux.dev>, Song Liu <song@kernel.org>, Yonghong Song <yhs@fb.com>, John Fastabend <john.fastabend@gmail.com>, KP Singh <kpsingh@kernel.org>, Stanislav Fomichev <sdf@google.com>, Hao Luo <haoluo@google.com>, Jiri Olsa <jolsa@kernel.org>, Shuah Khan <shuah@kernel.org>
There is a newer version of this series
[PATCH mptcp-next v6 07/13] mptcp: don't delegate sending repeatedly
Posted by Geliang Tang 3 years, 4 months ago
Do not delegate sending to a subflow repeatedly. Only do it to the subflow
without delegated action.

Signed-off-by: Geliang Tang <geliang.tang@suse.com>
---
 net/mptcp/protocol.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 86ac38d10bc4..6f55b51e10eb 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -1600,6 +1600,7 @@ static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk,
 					 bool first)
 {
 	struct mptcp_sock *msk = mptcp_sk(sk);
+	struct mptcp_subflow_context *subflow;
 	struct mptcp_sendmsg_info info = {
 		.data_lock_held = true,
 	};
@@ -1622,7 +1623,10 @@ static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk,
 			if (!xmit_ssk)
 				goto out;
 			if (xmit_ssk != ssk) {
-				mptcp_subflow_delegate(mptcp_subflow_ctx(xmit_ssk),
+				subflow = mptcp_subflow_ctx(xmit_ssk);
+				if (mptcp_subflow_has_delegated_action(subflow))
+					goto out;
+				mptcp_subflow_delegate(subflow,
 						       MPTCP_DELEGATE_SEND);
 				goto out;
 			}
-- 
2.35.3
Re: [PATCH mptcp-next v6 07/13] mptcp: don't delegate sending repeatedly
Posted by Mat Martineau 3 years, 4 months ago
On Tue, 11 Oct 2022, Geliang Tang wrote:

> Do not delegate sending to a subflow repeatedly. Only do it to the subflow
> without delegated action.
>
> Signed-off-by: Geliang Tang <geliang.tang@suse.com>
> ---
> net/mptcp/protocol.c | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> index 86ac38d10bc4..6f55b51e10eb 100644
> --- a/net/mptcp/protocol.c
> +++ b/net/mptcp/protocol.c
> @@ -1600,6 +1600,7 @@ static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk,
> 					 bool first)
> {
> 	struct mptcp_sock *msk = mptcp_sk(sk);
> +	struct mptcp_subflow_context *subflow;
> 	struct mptcp_sendmsg_info info = {
> 		.data_lock_held = true,
> 	};
> @@ -1622,7 +1623,10 @@ static void __mptcp_subflow_push_pending(struct sock *sk, struct sock *ssk,
> 			if (!xmit_ssk)
> 				goto out;
> 			if (xmit_ssk != ssk) {
> -				mptcp_subflow_delegate(mptcp_subflow_ctx(xmit_ssk),
> +				subflow = mptcp_subflow_ctx(xmit_ssk);
> +				if (mptcp_subflow_has_delegated_action(subflow))
> +					goto out;
> +				mptcp_subflow_delegate(subflow,
> 						       MPTCP_DELEGATE_SEND);

Hi Geliang -

Did this patch fix a problem you were seeing? It seems like it isn't 
needed, and might introduce a bug.

mptcp_subflow_delegate() does a test_and_set_bit() to see if the specific 
action is already scheduled. This new code will skip the delegated send if 
*any* delegated action is set on the subflow.

> 				goto out;
> 			}
> -- 
> 2.35.3
>
>
>

--
Mat Martineau
Intel