[PATCH mptcp-net 2/3] mptcp: factor-out cgroup data inherit helper

Paolo Abeni posted 3 patches 2 weeks, 5 days ago
[PATCH mptcp-net 2/3] mptcp: factor-out cgroup data inherit helper
Posted by Paolo Abeni 2 weeks, 5 days ago
MPTCP will soon need the same functionality for passive sockets,
factor them out in a common helper. No functional change intended.

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
 net/mptcp/protocol.h |  2 ++
 net/mptcp/subflow.c  | 20 ++++++++++++--------
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
index 051f21b06d33..300ac7030958 100644
--- a/net/mptcp/protocol.h
+++ b/net/mptcp/protocol.h
@@ -755,6 +755,8 @@ mptcp_subflow_delegated_next(struct mptcp_delegated_action *delegated)
 	return ret;
 }
 
+void __mptcp_inherit_cgrp_data(struct sock *sk, struct sock *ssk);
+
 int mptcp_is_enabled(const struct net *net);
 unsigned int mptcp_get_add_addr_timeout(const struct net *net);
 int mptcp_is_checksum_enabled(const struct net *net);
diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
index 60f100b2a0c9..599a21d92590 100644
--- a/net/mptcp/subflow.c
+++ b/net/mptcp/subflow.c
@@ -1721,21 +1721,25 @@ int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_pm_local *local,
 	return err;
 }
 
-static void mptcp_attach_cgroup(struct sock *parent, struct sock *child)
+void __mptcp_inherit_cgrp_data(struct sock *sk, struct sock *ssk)
 {
 #ifdef CONFIG_SOCK_CGROUP_DATA
-	struct sock_cgroup_data *parent_skcd = &parent->sk_cgrp_data,
-				*child_skcd = &child->sk_cgrp_data;
+	struct sock_cgroup_data *sk_cd = &sk->sk_cgrp_data,
+				*ssk_cd = &ssk->sk_cgrp_data;
 
 	/* only the additional subflows created by kworkers have to be modified */
-	if (cgroup_id(sock_cgroup_ptr(parent_skcd)) !=
-	    cgroup_id(sock_cgroup_ptr(child_skcd))) {
-		cgroup_sk_free(child_skcd);
-		*child_skcd = *parent_skcd;
-		cgroup_sk_clone(child_skcd);
+	if (cgroup_id(sock_cgroup_ptr(sk_cd)) !=
+	    cgroup_id(sock_cgroup_ptr(ssk_cd))) {
+		cgroup_sk_free(ssk_cd);
+		*ssk_cd = *sk_cd;
+		cgroup_sk_clone(sk_cd);
 	}
 #endif /* CONFIG_SOCK_CGROUP_DATA */
+}
 
+static void mptcp_attach_cgroup(struct sock *parent, struct sock *child)
+{
+	__mptcp_inherit_cgrp_data(parent, child);
 	if (mem_cgroup_sockets_enabled)
 		mem_cgroup_sk_inherit(parent, child);
 }
-- 
2.51.0
Re: [PATCH mptcp-net 2/3] mptcp: factor-out cgroup data inherit helper
Posted by Geliang Tang 2 weeks, 2 days ago
Hi Paolo,

On Fri, 2025-11-07 at 22:55 +0100, Paolo Abeni wrote:
> MPTCP will soon need the same functionality for passive sockets,
> factor them out in a common helper. No functional change intended.
> 
> Signed-off-by: Paolo Abeni <pabeni@redhat.com>

This patch looks good to me.

    Reviewed-by: Geliang Tang <geliang@kernel.org>

Thanks,
-Geliang

> ---
>  net/mptcp/protocol.h |  2 ++
>  net/mptcp/subflow.c  | 20 ++++++++++++--------
>  2 files changed, 14 insertions(+), 8 deletions(-)
> 
> diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h
> index 051f21b06d33..300ac7030958 100644
> --- a/net/mptcp/protocol.h
> +++ b/net/mptcp/protocol.h
> @@ -755,6 +755,8 @@ mptcp_subflow_delegated_next(struct
> mptcp_delegated_action *delegated)
>  	return ret;
>  }
>  
> +void __mptcp_inherit_cgrp_data(struct sock *sk, struct sock *ssk);
> +
>  int mptcp_is_enabled(const struct net *net);
>  unsigned int mptcp_get_add_addr_timeout(const struct net *net);
>  int mptcp_is_checksum_enabled(const struct net *net);
> diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c
> index 60f100b2a0c9..599a21d92590 100644
> --- a/net/mptcp/subflow.c
> +++ b/net/mptcp/subflow.c
> @@ -1721,21 +1721,25 @@ int __mptcp_subflow_connect(struct sock *sk,
> const struct mptcp_pm_local *local,
>  	return err;
>  }
>  
> -static void mptcp_attach_cgroup(struct sock *parent, struct sock
> *child)
> +void __mptcp_inherit_cgrp_data(struct sock *sk, struct sock *ssk)
>  {
>  #ifdef CONFIG_SOCK_CGROUP_DATA
> -	struct sock_cgroup_data *parent_skcd = &parent-
> >sk_cgrp_data,
> -				*child_skcd = &child->sk_cgrp_data;
> +	struct sock_cgroup_data *sk_cd = &sk->sk_cgrp_data,
> +				*ssk_cd = &ssk->sk_cgrp_data;
>  
>  	/* only the additional subflows created by kworkers have to
> be modified */
> -	if (cgroup_id(sock_cgroup_ptr(parent_skcd)) !=
> -	    cgroup_id(sock_cgroup_ptr(child_skcd))) {
> -		cgroup_sk_free(child_skcd);
> -		*child_skcd = *parent_skcd;
> -		cgroup_sk_clone(child_skcd);
> +	if (cgroup_id(sock_cgroup_ptr(sk_cd)) !=
> +	    cgroup_id(sock_cgroup_ptr(ssk_cd))) {
> +		cgroup_sk_free(ssk_cd);
> +		*ssk_cd = *sk_cd;
> +		cgroup_sk_clone(sk_cd);
>  	}
>  #endif /* CONFIG_SOCK_CGROUP_DATA */
> +}
>  
> +static void mptcp_attach_cgroup(struct sock *parent, struct sock
> *child)
> +{
> +	__mptcp_inherit_cgrp_data(parent, child);
>  	if (mem_cgroup_sockets_enabled)
>  		mem_cgroup_sk_inherit(parent, child);
>  }