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