All of lore.kernel.org
 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 v15 03/19] mptcp: move last_snd into mptcp_sched_ops
Date: Tue, 25 Oct 2022 17:21:42 -0700 (PDT)	[thread overview]
Message-ID: <5cb339d4-afe9-1dfa-4fcb-66a301c1b203@linux.intel.com> (raw)
In-Reply-To: <a552af9d09a972538976a1b5ae3159707baa24a8.1666349129.git.geliang.tang@suse.com>

On Fri, 21 Oct 2022, Geliang Tang wrote:

> Drop the useless msk->last_snd and macro MPTCP_RESET_SCHEDULER. Move
> last_snd from struct mptcp_sock into struct mptcp_sched_ops.
>
> Signed-off-by: Geliang Tang <geliang.tang@suse.com>
> ---
> include/net/mptcp.h    |  3 +++
> net/mptcp/pm.c         |  9 +--------
> net/mptcp/pm_netlink.c |  3 ---
> net/mptcp/protocol.c   | 13 ++++---------
> net/mptcp/protocol.h   |  2 --
> net/mptcp/sched.c      |  3 +++
> 6 files changed, 11 insertions(+), 22 deletions(-)
>
> diff --git a/include/net/mptcp.h b/include/net/mptcp.h
> index 0f386d805957..a45e00bf2f3e 100644
> --- a/include/net/mptcp.h
> +++ b/include/net/mptcp.h
> @@ -110,6 +110,9 @@ struct mptcp_sched_ops {
> 	int (*get_subflow)(const struct mptcp_sock *msk,
> 			   struct mptcp_sched_data *data);
>
> +	/* round-robin scheduler */
> +	struct sock	*last_snd;
> +

Hi Geliang -

There's one mptcp_sched_ops per scheduler, not one per socket. So it 
doesn't work to add per-socket data (like last_snd and snd_burst) to this 
structure.

- Mat


> 	char			name[MPTCP_SCHED_NAME_MAX];
> 	struct module		*owner;
> 	struct list_head	list;
> diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
> index 45e2a48397b9..cdeb7280ac76 100644
> --- a/net/mptcp/pm.c
> +++ b/net/mptcp/pm.c
> @@ -282,15 +282,8 @@ void mptcp_pm_mp_prio_received(struct sock *ssk, u8 bkup)
>
> 	pr_debug("subflow->backup=%d, bkup=%d\n", subflow->backup, bkup);
> 	msk = mptcp_sk(sk);
> -	if (subflow->backup != bkup) {
> +	if (subflow->backup != bkup)
> 		subflow->backup = bkup;
> -		mptcp_data_lock(sk);
> -		if (!sock_owned_by_user(sk))
> -			msk->last_snd = NULL;
> -		else
> -			__set_bit(MPTCP_RESET_SCHEDULER,  &msk->cb_flags);
> -		mptcp_data_unlock(sk);
> -	}
>
> 	mptcp_event(MPTCP_EVENT_SUB_PRIORITY, msk, ssk, GFP_ATOMIC);
> }
> diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c
> index 9813ed0fde9b..1f2da4aedcb4 100644
> --- a/net/mptcp/pm_netlink.c
> +++ b/net/mptcp/pm_netlink.c
> @@ -475,9 +475,6 @@ static void __mptcp_pm_send_ack(struct mptcp_sock *msk, struct mptcp_subflow_con
>
> 	slow = lock_sock_fast(ssk);
> 	if (prio) {
> -		if (subflow->backup != backup)
> -			msk->last_snd = NULL;
> -
> 		subflow->send_mp_prio = 1;
> 		subflow->backup = backup;
> 		subflow->request_bkup = backup;
> diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> index 03312e762606..a9d33dea2a8a 100644
> --- a/net/mptcp/protocol.c
> +++ b/net/mptcp/protocol.c
> @@ -1469,16 +1469,13 @@ struct sock *mptcp_subflow_get_send(struct mptcp_sock *msk)
>
> 	burst = min_t(int, MPTCP_SEND_BURST_SIZE, mptcp_wnd_end(msk) - msk->snd_nxt);
> 	wmem = READ_ONCE(ssk->sk_wmem_queued);
> -	if (!burst) {
> -		msk->last_snd = NULL;
> +	if (!burst)
> 		return ssk;
> -	}
>
> 	subflow = mptcp_subflow_ctx(ssk);
> 	subflow->avg_pacing_rate = div_u64((u64)subflow->avg_pacing_rate * wmem +
> 					   READ_ONCE(ssk->sk_pacing_rate) * burst,
> 					   burst + wmem);
> -	msk->last_snd = ssk;
> 	msk->snd_burst = burst;
> 	return ssk;
> }
> @@ -2378,8 +2375,8 @@ static void __mptcp_close_ssk(struct sock *sk, struct sock *ssk,
> 		msk->first = NULL;
>
> out:
> -	if (ssk == msk->last_snd)
> -		msk->last_snd = NULL;
> +	if (msk->sched && ssk == msk->sched->last_snd)
> +		msk->sched->last_snd = NULL;
>
> 	if (need_push)
> 		__mptcp_push_pending(sk, 0);
> @@ -3013,7 +3010,7 @@ static int mptcp_disconnect(struct sock *sk, int flags)
> 	 * subflow
> 	 */
> 	mptcp_destroy_common(msk, MPTCP_CF_FASTCLOSE);
> -	msk->last_snd = NULL;
> +	msk->sched->last_snd = NULL;
> 	WRITE_ONCE(msk->flags, 0);
> 	msk->cb_flags = 0;
> 	msk->push_pending = 0;
> @@ -3274,8 +3271,6 @@ static void mptcp_release_cb(struct sock *sk)
> 			__mptcp_set_connected(sk);
> 		if (__test_and_clear_bit(MPTCP_ERROR_REPORT, &msk->cb_flags))
> 			__mptcp_error_report(sk);
> -		if (__test_and_clear_bit(MPTCP_RESET_SCHEDULER, &msk->cb_flags))
> -			msk->last_snd = NULL;
> 	}
>
> 	__mptcp_update_rmem(sk);
> diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
> index 8f48f881adf8..a58fa261f487 100644
> --- a/net/mptcp/protocol.h
> +++ b/net/mptcp/protocol.h
> @@ -124,7 +124,6 @@
> #define MPTCP_RETRANSMIT	4
> #define MPTCP_FLUSH_JOIN_LIST	5
> #define MPTCP_CONNECTED		6
> -#define MPTCP_RESET_SCHEDULER	7
>
> static inline bool before64(__u64 seq1, __u64 seq2)
> {
> @@ -258,7 +257,6 @@ struct mptcp_sock {
> 	atomic64_t	rcv_wnd_sent;
> 	u64		rcv_data_fin_seq;
> 	int		rmem_fwd_alloc;
> -	struct sock	*last_snd;
> 	int		snd_burst;
> 	int		old_wspace;
> 	u64		recovery_snd_nxt;	/* in recovery mode accept up to this seq;
> diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
> index 6324a8a76382..f6c622e15584 100644
> --- a/net/mptcp/sched.c
> +++ b/net/mptcp/sched.c
> @@ -68,6 +68,8 @@ int mptcp_init_sched(struct mptcp_sock *msk,
> 	if (msk->sched->init)
> 		msk->sched->init(msk);
>
> +	msk->sched->last_snd = NULL;
> +
> 	pr_debug("sched=%s", msk->sched->name);
>
> out:
> @@ -81,6 +83,7 @@ void mptcp_release_sched(struct mptcp_sock *msk)
> 	if (!sched)
> 		return;
>
> +	msk->sched->last_snd = NULL;
> 	msk->sched = NULL;
> 	if (sched->release)
> 		sched->release(msk);
> -- 
> 2.35.3
>
>
>

--
Mat Martineau
Intel

  reply	other threads:[~2022-10-26  0:21 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-21 10:59 [PATCH mptcp-next v15 00/19] BPF redundant scheduler Geliang Tang
2022-10-21 10:59 ` [PATCH mptcp-next v15 01/19] mptcp: refactor push_pending logic Geliang Tang
2022-10-21 10:59 ` [PATCH mptcp-next v15 02/19] Squash to "mptcp: add struct mptcp_sched_ops" Geliang Tang
2022-10-21 10:59 ` [PATCH mptcp-next v15 03/19] mptcp: move last_snd into mptcp_sched_ops Geliang Tang
2022-10-26  0:21   ` Mat Martineau [this message]
2022-10-21 10:59 ` [PATCH mptcp-next v15 04/19] mptcp: move snd_burst " Geliang Tang
2022-10-21 10:59 ` [PATCH mptcp-next v15 05/19] Squash to "mptcp: add get_subflow wrappers" Geliang Tang
2022-10-21 10:59 ` [PATCH mptcp-next v15 06/19] mptcp: add sched_data_set_contexts helper Geliang Tang
2022-10-21 10:59 ` [PATCH mptcp-next v15 07/19] Squash to "bpf: Add bpf_mptcp_sched_ops" Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 08/19] Squash to "bpf: Add bpf_mptcp_sched_kfunc_set" Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 09/19] Squash to "selftests/bpf: Add bpf_first scheduler" Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 10/19] Squash to "selftests/bpf: Add bpf_bkup scheduler" Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 11/19] Squash to "selftests/bpf: Add bpf_rr scheduler" Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 12/19] mptcp: add scheduler wrappers Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 13/19] mptcp: use get_send wrapper in mptcp_push_pending Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 14/19] mptcp: use get_send in mptcp_subflow_push_pending Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 15/19] mptcp: use get_retrans wrapper in mptcp_retrans Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 16/19] mptcp: delay updating first_pending Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 17/19] mptcp: delay updating already_sent Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 18/19] selftests/bpf: Add bpf_red scheduler Geliang Tang
2022-10-21 11:00 ` [PATCH mptcp-next v15 19/19] selftests/bpf: Add bpf_red test Geliang Tang
2022-10-21 11:33   ` selftests/bpf: Add bpf_red test: Build Failure MPTCP CI
2022-10-21 13:08   ` selftests/bpf: Add bpf_red test: Tests Results MPTCP CI
2022-10-22 12:56   ` [PATCH mptcp-next v15 19/19] selftests/bpf: Add bpf_red test Geliang Tang

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=5cb339d4-afe9-1dfa-4fcb-66a301c1b203@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.