From 3f541f2d6ef38bb3338a8a9b04e1a9c18b98011a 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 fb996124b3d5c..63972d712a1d6 100644 --- a/include/net/mptcp.h +++ b/include/net/mptcp.h @@ -106,6 +106,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 a7e1c10b19848..c842297727a53 100644 --- a/net/mptcp/sched.c +++ b/net/mptcp/sched.c @@ -141,6 +141,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; @@ -167,7 +176,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); } @@ -190,6 +199,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); }