Re: [PATCH v4 net-next 01/10] mptcp: Fix up subflow's memcg when CONFIG_SOCK_CGROUP_DATA=n.
From: Kuniyuki Iwashima <kuniyu@google.com>
Date: 2025-08-14 23:27:47
Also in:
linux-mm, mptcp, netdev
On Thu, Aug 14, 2025 at 2:44 PM Shakeel Butt [off-list ref] wrote:
On Thu, Aug 14, 2025 at 08:08:33PM +0000, Kuniyuki Iwashima wrote:quoted
When sk_alloc() allocates a socket, mem_cgroup_sk_alloc() sets sk->sk_memcg based on the current task. MPTCP subflow socket creation is triggered from userspace or an in-kernel worker. In the latter case, sk->sk_memcg is not what we want. So, we fix it up from the parent socket's sk->sk_memcg in mptcp_attach_cgroup(). Although the code is placed under #ifdef CONFIG_MEMCG, it is buried under #ifdef CONFIG_SOCK_CGROUP_DATA. The two configs are orthogonal. If CONFIG_MEMCG is enabled without CONFIG_SOCK_CGROUP_DATA, the subflow's memory usage is not charged correctly. Let's wrap sock_create_kern() for subflow with set_active_memcg() using the parent sk->sk_memcg. Fixes: 3764b0c5651e3 ("mptcp: attach subflow socket to parent cgroup") Suggested-by: Michal Koutný <mkoutny@suse.com> Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com> --- mm/memcontrol.c | 5 ++++- net/mptcp/subflow.c | 11 +++-------- 2 files changed, 7 insertions(+), 9 deletions(-)diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 8dd7fbed5a94..450862e7fd7a 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c@@ -5006,8 +5006,11 @@ void mem_cgroup_sk_alloc(struct sock *sk) if (!in_task()) return; + memcg = current->active_memcg; +Use active_memcg() instead of current->active_memcg and do before the !in_task() check.
Why not reuse the !in_task() check here ? We never use int_active_memcg for socket and also know int_active_memcg is always NULL here.
Basically something like following:
memcg = active_memcg();
/* Do not associate the sock with unrelated interrupted task's memcg. */
if (!in_task() && !memcg)
return;