[PATCH mptcp-next v2 04/11] mptcp: set and clear bpf_iter_task

Geliang Tang posted 11 patches 1 month ago
There is a newer version of this series
[PATCH mptcp-next v2 04/11] mptcp: set and clear bpf_iter_task
Posted by Geliang Tang 1 month ago
From: Geliang Tang <tanggeliang@kylinos.cn>

Set bpf_iter_task before invoking get_send() and get_retrans(), and
clear it afterwords.

Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
---
 net/mptcp/sched.c | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
index c16c6fbd4ba2..ffb531b5a4d6 100644
--- a/net/mptcp/sched.c
+++ b/net/mptcp/sched.c
@@ -157,7 +157,8 @@ void mptcp_subflow_set_scheduled(struct mptcp_subflow_context *subflow,
 int mptcp_sched_get_send(struct mptcp_sock *msk)
 {
 	struct mptcp_subflow_context *subflow;
-	struct mptcp_sched_data *data = NULL;
+	struct mptcp_sched_data data;
+	int ret;
 
 	msk_owned_by_me(msk);
 
@@ -178,14 +179,20 @@ int mptcp_sched_get_send(struct mptcp_sock *msk)
 	}
 
 	if (msk->sched == &mptcp_sched_default || !msk->sched)
-		return mptcp_sched_default_get_send(msk, data);
-	return msk->sched->get_send(msk, data);
+		return mptcp_sched_default_get_send(msk, &data);
+
+	mptcp_sched_set_bpf_iter_task(&data);
+	ret = msk->sched->get_send(msk, &data);
+	mptcp_sched_clear_bpf_iter_task(&data);
+
+	return ret;
 }
 
 int mptcp_sched_get_retrans(struct mptcp_sock *msk)
 {
 	struct mptcp_subflow_context *subflow;
-	struct mptcp_sched_data *data = NULL;
+	struct mptcp_sched_data data;
+	int ret;
 
 	msk_owned_by_me(msk);
 
@@ -199,8 +206,14 @@ int mptcp_sched_get_retrans(struct mptcp_sock *msk)
 	}
 
 	if (msk->sched == &mptcp_sched_default || !msk->sched)
-		return mptcp_sched_default_get_retrans(msk, data);
+		return mptcp_sched_default_get_retrans(msk, &data);
+
+	mptcp_sched_set_bpf_iter_task(&data);
 	if (msk->sched->get_retrans)
-		return msk->sched->get_retrans(msk, data);
-	return msk->sched->get_send(msk, data);
+		ret = msk->sched->get_retrans(msk, &data);
+	else
+		ret = msk->sched->get_send(msk, &data);
+	mptcp_sched_clear_bpf_iter_task(&data);
+
+	return ret;
 }
-- 
2.43.0