MPTCP Linux Development
 help / color / mirror / Atom feed
From: Mat Martineau <mathew.j.martineau@linux.intel.com>
To: Geliang Tang <geliang.tang@suse.com>
Cc: mptcp@lists.linux.dev
Subject: Re: [PATCH mptcp-next v6 4/8] mptcp: add sched in mptcp_sock
Date: Fri, 25 Mar 2022 16:58:44 -0700 (PDT)	[thread overview]
Message-ID: <8163387d-485c-d972-4924-c347c88564f8@linux.intel.com> (raw)
In-Reply-To: <19e9377ac9a72587f729820fc793ebdca12d7424.1648223504.git.geliang.tang@suse.com>

On Sat, 26 Mar 2022, Geliang Tang wrote:

> This patch added a new struct member sched in struct mptcp_sock.
> And two helpers mptcp_init_sched() and mptcp_release_sched() to
> init and release it.
>
> Init it with the sysctl scheduler in mptcp_init_sock(), copy the
> scheduler from the parent in mptcp_sk_clone(), and release it in
> __mptcp_destroy_sock().
>
> Signed-off-by: Geliang Tang <geliang.tang@suse.com>
> ---
> net/mptcp/protocol.c |  4 ++++
> net/mptcp/protocol.h |  4 ++++
> net/mptcp/sched.c    | 21 +++++++++++++++++++++
> 3 files changed, 29 insertions(+)
>
> diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> index 2c684034fe7a..82b3846147a6 100644
> --- a/net/mptcp/protocol.c
> +++ b/net/mptcp/protocol.c
> @@ -2662,6 +2662,8 @@ static int mptcp_init_sock(struct sock *sk)
> 	 * propagate the correct value
> 	 */
> 	mptcp_ca_reset(sk);
> +	mptcp_init_sched(mptcp_sk(sk),
> +			 mptcp_sched_find(net, mptcp_get_scheduler(net)));
>
> 	sk_sockets_allocated_inc(sk);
> 	sk->sk_rcvbuf = sock_net(sk)->ipv4.sysctl_tcp_rmem[1];
> @@ -2817,6 +2819,7 @@ static void __mptcp_destroy_sock(struct sock *sk)
> 	sk_stop_timer(sk, &sk->sk_timer);
> 	mptcp_data_unlock(sk);
> 	msk->pm.status = 0;
> +	mptcp_release_sched(msk);
>
> 	/* clears msk->subflow, allowing the following loop to close
> 	 * even the initial subflow
> @@ -2994,6 +2997,7 @@ struct sock *mptcp_sk_clone(const struct sock *sk,
> 	msk->snd_una = msk->write_seq;
> 	msk->wnd_end = msk->snd_nxt + req->rsk_rcv_wnd;
> 	msk->setsockopt_seq = mptcp_sk(sk)->setsockopt_seq;
> +	mptcp_init_sched(msk, mptcp_sk(sk)->sched);
>
> 	if (mp_opt->suboptions & OPTIONS_MPTCP_MPC) {
> 		msk->can_ack = true;
> diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
> index 9ad7d83767fa..b70582f9c3c9 100644
> --- a/net/mptcp/protocol.h
> +++ b/net/mptcp/protocol.h
> @@ -288,6 +288,7 @@ struct mptcp_sock {
> 	struct socket	*subflow; /* outgoing connect/listener/!mp_capable */
> 	struct sock	*first;
> 	struct mptcp_pm_data	pm;
> +	struct mptcp_sched_ops	*sched;
> 	struct {
> 		u32	space;	/* bytes copied in last measurement window */
> 		u32	copied; /* bytes copied in this measurement window */
> @@ -618,6 +619,9 @@ void mptcp_unregister_scheduler(const struct net *net,
> struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk);
> void mptcp_sched_init(void);
> void mptcp_sched_data_init(struct sock *sk);
> +void mptcp_init_sched(struct mptcp_sock *msk,
> +		      struct mptcp_sched_ops *sched);
> +void mptcp_release_sched(struct mptcp_sock *msk);
>
> static inline bool __mptcp_subflow_active(struct mptcp_subflow_context *subflow)
> {
> diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
> index 1fb3dd24d6ff..5ccdb1756dc6 100644
> --- a/net/mptcp/sched.c
> +++ b/net/mptcp/sched.c
> @@ -125,3 +125,24 @@ void mptcp_sched_data_init(struct sock *sk)
> {
> 	mptcp_register_scheduler(sock_net(sk), &mptcp_sched_default);
> }
> +
> +void mptcp_init_sched(struct mptcp_sock *msk,
> +		      struct mptcp_sched_ops *sched)
> +{
> +	if (!sched)
> +		msk->sched = &mptcp_sched_default;
> +	else
> +		msk->sched = sched;
> +

The msk has a direct pointer to the scheduler object now. The scheduler 
could be unregistered at any time, making this pointer invalid.

The TCP CA comments mention a reference count for the non-bpf CA modules, 
but is that handled for schedulers? Does each scheduler have to implement 
that in their init/release hooks? If so, would be good to document that in 
the struct mptcp_sched_ops declaration comments.

> +	if (msk->sched->init)
> +		msk->sched->init(msk);
> +
> +	pr_debug("sched=%s", msk->sched->name);
> +}
> +
> +void mptcp_release_sched(struct mptcp_sock *msk)
> +{
> +	if (msk->sched && msk->sched->release)
> +		msk->sched->release(msk);
> +	msk->sched = NULL;
> +}
> -- 
> 2.34.1
>
>
>

--
Mat Martineau
Intel

  reply	other threads:[~2022-03-25 23:58 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-25 16:11 [PATCH mptcp-next v6 0/8] BPF packet scheduler Geliang Tang
2022-03-25 16:11 ` [PATCH mptcp-next v6 1/8] mptcp: add struct mptcp_sched_ops Geliang Tang
2022-03-25 16:11 ` [PATCH mptcp-next v6 2/8] mptcp: register default scheduler Geliang Tang
2022-03-25 16:11 ` [PATCH mptcp-next v6 3/8] mptcp: add a new sysctl scheduler Geliang Tang
2022-03-25 16:12 ` [PATCH mptcp-next v6 4/8] mptcp: add sched in mptcp_sock Geliang Tang
2022-03-25 23:58   ` Mat Martineau [this message]
2022-03-25 16:12 ` [PATCH mptcp-next v6 5/8] mptcp: add get_subflow wrapper Geliang Tang
2022-03-25 16:12 ` [PATCH mptcp-next v6 6/8] mptcp: add bpf_mptcp_sched_ops Geliang Tang
2022-03-26  0:22   ` Mat Martineau
2022-03-25 16:12 ` [PATCH mptcp-next v6 7/8] selftests: bpf: add bpf_first scheduler Geliang Tang
2022-03-26  0:23   ` Mat Martineau
2022-03-25 16:12 ` [PATCH mptcp-next v6 8/8] selftests: bpf: add bpf_first test Geliang Tang
2022-03-30 16:54   ` selftests: bpf: add bpf_first test: Build Failure MPTCP CI
2022-03-30 20:51   ` selftests: bpf: add bpf_first test: Tests Results MPTCP CI

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8163387d-485c-d972-4924-c347c88564f8@linux.intel.com \
    --to=mathew.j.martineau@linux.intel.com \
    --cc=geliang.tang@suse.com \
    --cc=mptcp@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox