From d34e0194f74b41c3feec16cabc33bd5e47b01a29 Mon Sep 17 00:00:00 2001 From: Geliang Tang Date: Tue, 21 Nov 2023 17:06:47 +0800 Subject: [PATCH] mptcp: add data_init interface for scheduler This patch adds a new interface data_init() for struct mptcp_sched_ops. It's a new callback to initiate optimisations. Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/344 Signed-off-by: Geliang Tang --- include/net/mptcp.h | 2 ++ net/mptcp/sched.c | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/net/mptcp.h b/include/net/mptcp.h index 0bc4ab03f4878..c3d0ea07cf0c7 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -109,6 +109,8 @@ struct mptcp_sched_data { }; struct mptcp_sched_ops { + void (*data_init)(struct mptcp_sock *msk, + struct mptcp_sched_data *data); int (*get_subflow)(struct mptcp_sock *msk, struct mptcp_sched_data *data); diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c index 8def10abd60e6..4708e8a9857ae 100644 --- a/net/mptcp/sched.c +++ b/net/mptcp/sched.c @@ -163,6 +163,15 @@ static void mptcp_sched_data_set_contexts(const struct mptcp_sock *msk, data->contexts[i] = NULL; } +static void mptcp_sched_data_init(struct mptcp_sock *msk, + struct mptcp_sched_data *data) +{ + mptcp_sched_data_set_contexts(msk, data); + + if (msk->sched->data_init) + msk->sched->data_init(msk, data); +} + int mptcp_sched_get_send(struct mptcp_sock *msk) { struct mptcp_subflow_context *subflow; @@ -189,7 +198,7 @@ int mptcp_sched_get_send(struct mptcp_sock *msk) data.reinject = false; if (msk->sched == &mptcp_sched_default || !msk->sched) return mptcp_sched_default_get_subflow(msk, &data); - mptcp_sched_data_set_contexts(msk, &data); + mptcp_sched_data_init(msk, &data); return msk->sched->get_subflow(msk, &data); } @@ -212,6 +221,6 @@ int mptcp_sched_get_retrans(struct mptcp_sock *msk) data.reinject = true; if (msk->sched == &mptcp_sched_default || !msk->sched) return mptcp_sched_default_get_subflow(msk, &data); - mptcp_sched_data_set_contexts(msk, &data); + mptcp_sched_data_init(msk, &data); return msk->sched->get_subflow(msk, &data); }