Hi Matt, On Fri, 2025-04-11 at 13:04 +0200, Matthieu Baerts (NGI0) wrote: > From: Geliang Tang <geli...@kernel.org>
Please update my email as "Geliang Tang <tanggeli...@kylinos.cn>" here and in patch 7, otherwise, CI will complain that the email address after "From: " is different from that after "Signed-off-by: ". Thanks, -Geliang > > A new interface .validate has been added in struct bpf_struct_ops > recently. This patch prepares a future struct_ops support by > implementing it as a new helper mptcp_validate_scheduler() for struct > mptcp_sched_ops. > > In this helper, check whether the required ops "get_subflow" of > struct > mptcp_sched_ops has been implemented. > > Signed-off-by: Geliang Tang <tanggeli...@kylinos.cn> > Reviewed-by: Mat Martineau <martin...@kernel.org> > Signed-off-by: Matthieu Baerts (NGI0) <matt...@kernel.org> > --- > net/mptcp/protocol.h | 1 + > net/mptcp/sched.c | 17 +++++++++++++++-- > 2 files changed, 16 insertions(+), 2 deletions(-) > > diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h > index > d409586b5977f93bff14fffd83b1d3020d57353b..7aa38d74fef6b5f00d97a114d74 > b711014d0a52d 100644 > --- a/net/mptcp/protocol.h > +++ b/net/mptcp/protocol.h > @@ -744,6 +744,7 @@ void mptcp_info2sockaddr(const struct > mptcp_addr_info *info, > struct sockaddr_storage *addr, > unsigned short family); > struct mptcp_sched_ops *mptcp_sched_find(const char *name); > +int mptcp_validate_scheduler(struct mptcp_sched_ops *sched); > int mptcp_register_scheduler(struct mptcp_sched_ops *sched); > void mptcp_unregister_scheduler(struct mptcp_sched_ops *sched); > void mptcp_sched_init(void); > diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c > index > f09f7eb1d63f86b9899c72b5c2fd36c8445898a8..1e59072d478c9b52c7f7b60431b > 589f6ca3abe65 100644 > --- a/net/mptcp/sched.c > +++ b/net/mptcp/sched.c > @@ -82,10 +82,23 @@ void mptcp_get_available_schedulers(char *buf, > size_t maxlen) > rcu_read_unlock(); > } > > +int mptcp_validate_scheduler(struct mptcp_sched_ops *sched) > +{ > + if (!sched->get_send) { > + pr_err("%s does not implement required ops\n", > sched->name); > + return -EINVAL; > + } > + > + return 0; > +} > + > int mptcp_register_scheduler(struct mptcp_sched_ops *sched) > { > - if (!sched->get_send) > - return -EINVAL; > + int ret; > + > + ret = mptcp_validate_scheduler(sched); > + if (ret) > + return ret; > > spin_lock(&mptcp_sched_list_lock); > if (mptcp_sched_find(sched->name)) { >