From: Gang Yan <yangang@kylinos.cn>
This patch removes the need to handle a NULL pm_ops in the fallback
path, and moves the rcu_read_lock\unlock into mptcp_pm_ops_init.
Following sashiko's comments, it also moves the pr_debug() before
bpf_module_put() in mptcp_pm_ops_release.
Signed-off-by: Gang Yan <yangang@kylinos.cn>
---
net/mptcp/pm.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
index 9dc7b41fb562..033f783d4990 100644
--- a/net/mptcp/pm.c
+++ b/net/mptcp/pm.c
@@ -1137,12 +1137,13 @@ void mptcp_pm_worker(struct mptcp_sock *msk)
spin_unlock_bh(&msk->pm.lock);
}
-static void mptcp_pm_ops_init(struct mptcp_sock *msk,
- struct mptcp_pm_ops *pm_ops)
+static void mptcp_pm_ops_init(struct mptcp_sock *msk, const char *pm_name)
{
+ struct mptcp_pm_ops *pm_ops;
+
+ pm_ops = mptcp_pm_find(pm_name);
if (!pm_ops || !bpf_try_module_get(pm_ops, pm_ops->owner)) {
- pr_warn_once("pm %s fails, fallback to default pm",
- pm_ops->name);
+ pr_warn_once("pm %s fails, fallback to default pm", pm_name);
pm_ops = &mptcp_pm_kernel;
}
@@ -1161,9 +1162,9 @@ static void mptcp_pm_ops_release(struct mptcp_sock *msk)
if (pm_ops->release)
pm_ops->release(msk);
- bpf_module_put(pm_ops, pm_ops->owner);
-
pr_debug("pm %s released\n", pm_ops->name);
+
+ bpf_module_put(pm_ops, pm_ops->owner);
}
void mptcp_pm_destroy(struct mptcp_sock *msk)
@@ -1185,7 +1186,7 @@ void mptcp_pm_data_reset(struct mptcp_sock *msk)
WRITE_ONCE(pm->pm_type, pm_type);
rcu_read_lock();
- mptcp_pm_ops_init(msk, mptcp_pm_find(pm_name));
+ mptcp_pm_ops_init(msk, pm_name);
rcu_read_unlock();
}
--
2.43.0
Hi Gang,
Thanks for this v3.
On Thu, 2026-07-02 at 14:30 +0800, Gang Yan wrote:
> From: Gang Yan <yangang@kylinos.cn>
>
> This patch removes the need to handle a NULL pm_ops in the fallback
> path, and moves the rcu_read_lock\unlock into mptcp_pm_ops_init.
The commit log doesn't match, but since this is a squash-to patch, it
may not be necessary to update the original commit log when merging.
Anyway, this patch LGTM. I've changed its status to "Queued".
-Geliang
>
> Following sashiko's comments, it also moves the pr_debug() before
> bpf_module_put() in mptcp_pm_ops_release.
>
> Signed-off-by: Gang Yan <yangang@kylinos.cn>
> ---
> net/mptcp/pm.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/net/mptcp/pm.c b/net/mptcp/pm.c
> index 9dc7b41fb562..033f783d4990 100644
> --- a/net/mptcp/pm.c
> +++ b/net/mptcp/pm.c
> @@ -1137,12 +1137,13 @@ void mptcp_pm_worker(struct mptcp_sock *msk)
> spin_unlock_bh(&msk->pm.lock);
> }
>
> -static void mptcp_pm_ops_init(struct mptcp_sock *msk,
> - struct mptcp_pm_ops *pm_ops)
> +static void mptcp_pm_ops_init(struct mptcp_sock *msk, const char
> *pm_name)
> {
> + struct mptcp_pm_ops *pm_ops;
> +
> + pm_ops = mptcp_pm_find(pm_name);
> if (!pm_ops || !bpf_try_module_get(pm_ops, pm_ops->owner)) {
> - pr_warn_once("pm %s fails, fallback to default pm",
> - pm_ops->name);
> + pr_warn_once("pm %s fails, fallback to default pm",
> pm_name);
> pm_ops = &mptcp_pm_kernel;
> }
>
> @@ -1161,9 +1162,9 @@ static void mptcp_pm_ops_release(struct
> mptcp_sock *msk)
> if (pm_ops->release)
> pm_ops->release(msk);
>
> - bpf_module_put(pm_ops, pm_ops->owner);
> -
> pr_debug("pm %s released\n", pm_ops->name);
> +
> + bpf_module_put(pm_ops, pm_ops->owner);
> }
>
> void mptcp_pm_destroy(struct mptcp_sock *msk)
> @@ -1185,7 +1186,7 @@ void mptcp_pm_data_reset(struct mptcp_sock
> *msk)
> WRITE_ONCE(pm->pm_type, pm_type);
>
> rcu_read_lock();
> - mptcp_pm_ops_init(msk, mptcp_pm_find(pm_name));
> + mptcp_pm_ops_init(msk, pm_name);
> rcu_read_unlock();
> }
>
Hi Gang,
Thank you for your modifications, that's great!
Our CI did some validations and here is its report:
- KVM Validation: normal (except selftest_mptcp_join): Success! ✅
- KVM Validation: normal (only selftest_mptcp_join): Success! ✅
- KVM Validation: debug (except selftest_mptcp_join): Success! ✅
- KVM Validation: debug (only selftest_mptcp_join): Success! ✅
- KVM Validation: btf-normal (only bpftest_all): Success! ✅
- KVM Validation: btf-debug (only bpftest_all): Success! ✅
- Task: https://github.com/multipath-tcp/mptcp_net-next/actions/runs/28571232891
Initiator: Patchew Applier
Commits: https://github.com/multipath-tcp/mptcp_net-next/commits/f4ca9be44841
Patchwork: https://patchwork.kernel.org/project/mptcp/list/?series=1120251
If there are some issues, you can reproduce them using the same environment as
the one used by the CI thanks to a docker image, e.g.:
$ cd [kernel source code]
$ docker run -v "${PWD}:${PWD}:rw" -w "${PWD}" --privileged --rm -it \
--pull always mptcp/mptcp-upstream-virtme-docker:latest \
auto-normal
For more details:
https://github.com/multipath-tcp/mptcp-upstream-virtme-docker
Please note that despite all the efforts that have been already done to have a
stable tests suite when executed on a public CI like here, it is possible some
reported issues are not due to your modifications. Still, do not hesitate to
help us improve that ;-)
Cheers,
MPTCP GH Action bot
Bot operated by Matthieu Baerts (NGI0 Core)
© 2016 - 2026 Red Hat, Inc.