Hi Geliang,
On 03/03/2025 05:22, Geliang Tang wrote:
> From: Geliang Tang <tanggeliang@kylinos.cn>
>
> This patch adds a new proc_handler "proc_pm_type" for "pm_type" to
> map old path manager sysctl "pm_type" to the newly added "path_manager".
Don't forget to add a selftest checking this new sysctl and the mapping
are correct, e.g. in userspace_pm.sh. See my previous comment:
https://lore.kernel.org/c49517d2-38e2-4848-9fb9-1c7748689cec@kernel.org
>
> Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
> ---
> net/mptcp/ctrl.c | 33 ++++++++++++++++++++++++++++++---
> 1 file changed, 30 insertions(+), 3 deletions(-)
>
> diff --git a/net/mptcp/ctrl.c b/net/mptcp/ctrl.c
> index d64e6b4f6d1d..32f13ab7db0a 100644
> --- a/net/mptcp/ctrl.c
> +++ b/net/mptcp/ctrl.c
> @@ -217,6 +217,35 @@ static int proc_path_manager(const struct ctl_table *ctl, int write,
> return ret;
> }
>
> +static int proc_pm_type(const struct ctl_table *ctl, int write,
> + void *buffer, size_t *lenp, loff_t *ppos)
> +{
> + struct mptcp_pernet *pernet = container_of(ctl->data,
> + struct mptcp_pernet,
> + pm_type);
Out of curiosity, do you plan to drop pernet->pm_type later on?
When all the mptcp_pm_is_{kernel,userspace}() will be dropped, I think
we can also drop it from the mptcp_pernet structure. At that point, we
could then read info from "path_manager" and write in ctl->data 0, 1, or
2. But only when we will no longer use pernet->pm_type.
> + unsigned int val = READ_ONCE(*(u8 *)ctl->data);
> + const struct ctl_table tbl = {
> + .maxlen = sizeof(val),
> + .data = &val,
> + };
> + int ret;
> +
> + if (val > mptcp_pm_type_max)
> + return -ERANGE;
You might not need this if ...
> +
> + ret = proc_douintvec(&tbl, write, buffer, lenp, ppos);
... you use proc_dou8vec_minmax() here and ...
> + if (write && ret == 0) {
> + char *path_manager = "kernel";
> +
> + if (val == MPTCP_PM_TYPE_USERSPACE)
> + path_manager = "userspace";
> + mptcp_set_path_manager(pernet->path_manager, path_manager);
> + WRITE_ONCE(*(u8 *)ctl->data, val);
> + }
> +
> + return ret;
> +}
> +
> static struct ctl_table mptcp_sysctl_table[] = {
> {
> .procname = "enabled",
> @@ -261,9 +290,7 @@ static struct ctl_table mptcp_sysctl_table[] = {
> .procname = "pm_type",
> .maxlen = sizeof(u8),
> .mode = 0644,
> - .proc_handler = proc_dou8vec_minmax,
> - .extra1 = SYSCTL_ZERO,
> - .extra2 = &mptcp_pm_type_max
... you keep these two last lines.
> + .proc_handler = proc_pm_type,
> },
> {
> .procname = "scheduler",
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.