From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 04E5A2BE637 for ; Mon, 11 Aug 2025 17:31:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933494; cv=none; b=Jvh3lyiFLcFX+YlrK/njBLlHcJiJI9X7ghpFm9dN+UKzBheZ7aRfb8/w6BbxOtEtzLdrosaNytXctfeuZQMIEDlWUmW26L8JJVnm94Eq0geyEQlNBNOuXs9xxfZkrXKr1Frbym63fmlVPtC1Lmf1p9EbLM0/5+YHaygwK8g7EOo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933494; c=relaxed/simple; bh=RraDdlXe6ciaP6cYzKFgCu43EUAwSOZf2SxKtlzfM/U=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=cosozWqgZUfSIc1R6FCNqxTY/2jjUuxKmmuf1CIy86usd3DVLTgHkp3p/OqTXT3sk227vVQBZatgMrxnOZfVz+Ba3sF58gkXGGodoya9g0VSg2G7TtBHi/aQobQYbOvCTY2kaC/sm1pP+pMeuAaMfJab/OkFwCgNccOSOC7mwCQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=EMk5Gmfo; arc=none smtp.client-ip=209.85.210.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="EMk5Gmfo" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-76bcd829ff1so4350461b3a.1 for ; Mon, 11 Aug 2025 10:31:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933492; x=1755538292; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=zi8XD71jgjXMWJD0GQyZXVIV2qpgVtIymKBEzG9L4F4=; b=EMk5GmfoCbwVyTiFVLYqGiDQMmGXtga+WaoXRWT20c/maSjlT9kdaGI0Kfcij2wL9k n92bqFm50a1dZzMy1Z7aMpp4ttiZLSA+IpwAExRZisV0ZXrcK+kVQY+/PVgSFWjJKlYT ceX2RLWq7GAGZE0kRqgRF83FxXifETGvK3LtfqBqhCbZd57O3hEvOZv5gYbv4E840c1J 1DQU/hK7mvb5asIVzXvRU9UD8rd0PtEbBFJWdRSTSns+KSdQBzmR1jFjLghCd2/XHTia 4IEAqCjUgdj1qJjc08tXK5tMPhP/m/KPr/WON5R4doayNOVjwOE35cSZ7k9hX5FDd6Og 5j+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933492; x=1755538292; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=zi8XD71jgjXMWJD0GQyZXVIV2qpgVtIymKBEzG9L4F4=; b=InGhZIpQ3owT9vVXqeOZgUEq2XTK1Jd6XvuysH9FW6qrYyh0Dxknsn7+WZ8JQlTXCZ UlXKJJO3YwzMaSO0lg8QkSj8sD9DO755zmsK4ocbWATT/DYqAiNdsoNOM9MNSchcKwJM lNwsAERiKfVYL+ai8o0c/ckDeBRKsGFmFMzom9vEvVL+qVjmKQ2LWgIDoIZ9h9MP+yvP Qk+wyAjTa3Hd+vSL8xP2eMyyY4JbX2VuyL/0UCZnccx6+Ty4DqLQHFUJ3XmBSTxExL3/ iyAFafYlqPSt5JvB6NkVH3PP77dK5oa6cu4jmNa8sg/8pcVkVkrsX7oEc1vzIhY5s1hd 6akg== X-Forwarded-Encrypted: i=1; AJvYcCX3yRj07loAqjKwk54i9ygd7GasRcooe1u990RpX2YF/yy1Yc1Sa1LGFBFQ93ipU41o+A+q8Q==@lists.linux.dev X-Gm-Message-State: AOJu0YyGEn/v6MLiovb6xbmXxFohQ17pNOL77inanFNZzKsDMUaBC+Nr nCpAMZrJ0+aPE7eSClUeQ6lY/jElSG7OeM2zlnLxYySSzMuA9TbGYtCTakEdTd5edbrPmV2AYv8 1cvZUDQ== X-Google-Smtp-Source: AGHT+IHo2yNLTeCJQnssS8cRVh9LBZumUnUBfB6vxpMn5hTdAQ6pUphTOW3txkt3Suq2A0M516UNLF041yo= X-Received: from pftb15.prod.google.com ([2002:a05:6a00:2cf:b0:76b:ca57:9538]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:2d1b:b0:748:ffaf:9b53 with SMTP id d2e1a72fcca58-76c461af0ebmr17005996b3a.16.1754933492214; Mon, 11 Aug 2025 10:31:32 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:29 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-2-kuniyu@google.com> Subject: [PATCH v2 net-next 01/12] mptcp: Fix up subflow's memcg when CONFIG_SOCK_CGROUP_DATA=n. From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 move the code out of the wrong ifdef guard. Note that sk->sk_memcg is freed in sk_prot_free() and the parent sk holds the refcnt of memcg->css here, so we don't need to use css_tryget(). Fixes: 3764b0c5651e3 ("mptcp: attach subflow socket to parent cgroup") Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Tested-by: syzbot@syzkaller.appspotmail.com --- include/linux/memcontrol.h | 6 ++++++ mm/memcontrol.c | 10 ++++++++++ net/mptcp/subflow.c | 11 +++-------- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 785173aa0739..25921fbec685 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1604,6 +1604,7 @@ extern struct static_key_false memcg_sockets_enabled_= key; #define mem_cgroup_sockets_enabled static_branch_unlikely(&memcg_sockets_e= nabled_key) void mem_cgroup_sk_alloc(struct sock *sk); void mem_cgroup_sk_free(struct sock *sk); +void mem_cgroup_sk_inherit(const struct sock *sk, struct sock *newsk); =20 #if BITS_PER_LONG < 64 static inline void mem_cgroup_set_socket_pressure(struct mem_cgroup *memcg) @@ -1661,6 +1662,11 @@ void reparent_shrinker_deferred(struct mem_cgroup *m= emcg); #define mem_cgroup_sockets_enabled 0 static inline void mem_cgroup_sk_alloc(struct sock *sk) { }; static inline void mem_cgroup_sk_free(struct sock *sk) { }; + +static inline void mem_cgroup_sk_inherit(const struct sock *sk, struct soc= k *newsk) +{ +} + static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *mem= cg) { return false; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 8dd7fbed5a94..08c6e06750ac 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5024,6 +5024,16 @@ void mem_cgroup_sk_free(struct sock *sk) css_put(&sk->sk_memcg->css); } =20 +void mem_cgroup_sk_inherit(const struct sock *sk, struct sock *newsk) +{ + if (sk->sk_memcg =3D=3D newsk->sk_memcg) + return; + + mem_cgroup_sk_free(newsk); + css_get(&sk->sk_memcg->css); + newsk->sk_memcg =3D sk->sk_memcg; +} + /** * mem_cgroup_charge_skmem - charge socket memory * @memcg: memcg to charge diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 3f1b62a9fe88..6fb635a95baf 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1717,19 +1717,14 @@ static void mptcp_attach_cgroup(struct sock *parent= , struct sock *child) /* only the additional subflows created by kworkers have to be modified */ if (cgroup_id(sock_cgroup_ptr(parent_skcd)) !=3D cgroup_id(sock_cgroup_ptr(child_skcd))) { -#ifdef CONFIG_MEMCG - struct mem_cgroup *memcg =3D parent->sk_memcg; - - mem_cgroup_sk_free(child); - if (memcg && css_tryget(&memcg->css)) - child->sk_memcg =3D memcg; -#endif /* CONFIG_MEMCG */ - cgroup_sk_free(child_skcd); *child_skcd =3D *parent_skcd; cgroup_sk_clone(child_skcd); } #endif /* CONFIG_SOCK_CGROUP_DATA */ + + if (mem_cgroup_sockets_enabled && parent->sk_memcg) + mem_cgroup_sk_inherit(parent, child); } =20 static void mptcp_subflow_ops_override(struct sock *ssk) --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90C3D2D47E7 for ; Mon, 11 Aug 2025 17:31:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933495; cv=none; b=O3afodMTLmeWI+wLOZDQgkdWJfGzq+FFu0cNxRsM6fmNOYLRqn0x1KYrRczJzXpKRMUlr4j8g5oZUWqO0LCODwbIClRjxJFMNLt/hJN9L6UUcZ6VNG9av8aFUxX3VzT+Daki4Bv0922Kf2jpyMnxax0qNSkh5RCuwxmjTLtNBlk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933495; c=relaxed/simple; bh=3O4wwZNIii75iBCsOBIERzFRse7hN1ZJ14qZD4q5cuU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=hSX88GQ7Lk30BFlOaTt1EHzZ1Lgx14T0Rs7N4zHXdTTgDKluhKru54pIbYIPYwwM8fpTpAy7uePn50CWh32gBQzb0SiGfpDSeQf6ig7n2MZiDX95kOYp/GDJoxnHsK3lC7iMK+20I/ddLcg3t6lN9KDM9rj40LYM1HLp5eLkB6U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=4gUmM31E; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="4gUmM31E" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-31f65d519d3so8993402a91.2 for ; Mon, 11 Aug 2025 10:31:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933494; x=1755538294; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=IJUMgP2fCvnJmK1Iv88gPtdmkhT/9+UsLcGRktrUImI=; b=4gUmM31EBXqn0F11nqivjd8CrY4TIxTphK3FMm42bgOMf3tLavmShOfZ19e5O2Nt89 mjskNBj+JyYx+NAM2TQxgj1ugAOPJAiybVWgG/s/t1mqbMMEo0IKxiJYH8pQ6jBxeOJQ rgmZ5oiX4Wz6nYcykID7AT73mtOixrDvDdZuwICoZdKAjGK8U6Im3jIDX9mswMdlmUnR Sx0F5w5mgG9buGkte2afO+rAC/GEYbpzrC/aCVV06dPiWwSWn5WFeFRhygjS/MwwTFdT 9CfnOK6GuCcrpeE54bfzhpvXMyoAVUOjkMM70zK7NJyq8nWbxwUT6SmZh44FYM83FVhy kIqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933494; x=1755538294; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=IJUMgP2fCvnJmK1Iv88gPtdmkhT/9+UsLcGRktrUImI=; b=xLe/uE2rrZEGnBcpm+7nHnKbbxb4+fVN8DFepqxOvWbmysGPeOViv8OdIZ57Dn0R5c vGrrJYHXg57cqu1ImsCx0ugsr+vGfMz1aN+WgXRH/PxbajfE7eWRgjbIfzXCNxhbEkQk dcI5GOXOJqYD764uBGh/y1vx66au6bXj9PyvnHm+oJcPLhFYaXIpckSc2ihR8gErwYZY cP7uFWaJwFZsvYnwh65/aw+azmqvmaI2dbV7kNfD4m0KamjB5hXt++5PpMAZ8Q4c0QJl XHoZcCBYu06/jKjKVgouddCK7Jsb+6/hfJZtd9oi0EIhktOHPLsiSQIyqTCaBG/l8MpP eg0w== X-Forwarded-Encrypted: i=1; AJvYcCU/TG1Oa2s3MC1QLv8kAhO4RRah1od/ZmC3UTJ2CuI2Qd/WprZfV0TWn30HWnQiQ/QGGZ1h8w==@lists.linux.dev X-Gm-Message-State: AOJu0Yy7wTh6uUdRRTTqhcZcQ/NbRCfrRRuuAHtQ0ehWRhDSeqJ1sAvy XxOqodmSmn7AjgL0TCtx4uo2hKmkli4Y/mnJr2unA4qsIh8LBOEt9XYBEMCWGH8n8zYSC+Bd7io /NXpapw== X-Google-Smtp-Source: AGHT+IGLJHxtKJ3Pk5R4dgQvk7gs39J/mY7N5xl2jz8WX6Gc8LUYFyja4buobT+GhatPyGHT1yaWPuvm76w= X-Received: from pjbsn13.prod.google.com ([2002:a17:90b:2e8d:b0:30a:31eb:ec8e]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:2251:b0:31f:1a3e:fe31 with SMTP id 98e67ed59e1d1-321c0a11aa9mr615779a91.11.1754933493761; Mon, 11 Aug 2025 10:31:33 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:30 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-3-kuniyu@google.com> Subject: [PATCH v2 net-next 02/12] mptcp: Use tcp_under_memory_pressure() in mptcp_epollin_ready(). From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some conditions used in mptcp_epollin_ready() are the same as tcp_under_memory_pressure(). We will modify tcp_under_memory_pressure() in the later patch. Let's use tcp_under_memory_pressure() instead. Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Tested-by: syzbot@syzkaller.appspotmail.com --- net/mptcp/protocol.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/net/mptcp/protocol.h b/net/mptcp/protocol.h index b15d7fab5c4b..a1787a1344ac 100644 --- a/net/mptcp/protocol.h +++ b/net/mptcp/protocol.h @@ -788,9 +788,7 @@ static inline bool mptcp_epollin_ready(const struct soc= k *sk) * as it can always coalesce them */ return (data_avail >=3D sk->sk_rcvlowat) || - (mem_cgroup_sockets_enabled && sk->sk_memcg && - mem_cgroup_under_socket_pressure(sk->sk_memcg)) || - READ_ONCE(tcp_memory_pressure); + tcp_under_memory_pressure(sk); } =20 int mptcp_set_rcvlowat(struct sock *sk, int val); --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pf1-f202.google.com (mail-pf1-f202.google.com [209.85.210.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 31A822D480F for ; Mon, 11 Aug 2025 17:31:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933497; cv=none; b=ZgMHAxW26WIAESs9SXLbD0185eBOq0HVvyuo9lT/AImubU36JgPIpTCbFORc6ZyYRSQQTEYU9EQWvZXgXi7xX23+JJwfCUrNcN5jPhCw4QMLXleep4ldrVk6bWRVMTi48cdULsJQejKDvNqnIGkVQgdKd2kAXIL1l666P9qL/NY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933497; c=relaxed/simple; bh=cucv/ThaYCwJefTQd8IcFflX9agEM1pAaEXctYSSzBY=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=dgHfw55Zuel4SZKCymiiNVwxrB8Z2osF/QYPYXLIUPlrG+FuBYZSZaSaM6x0nfCdE+apJjO2yj3zM5B//hH+djFv2O2v+vBYvGLKU0u+QBm4jzhA6bQw5dAhyZCnNNdg5nMc7laTD3kL7eISoF7f9OFF/yz6WR8TTYSCmCm2ZGQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=cPra4fGH; arc=none smtp.client-ip=209.85.210.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="cPra4fGH" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-76c19d1e510so4302227b3a.1 for ; Mon, 11 Aug 2025 10:31:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933495; x=1755538295; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=nbWyNjhRffdizOWiIb7bDk0DH91Nu7zFnwGTY/wxrLs=; b=cPra4fGH7brWPVRswYWwCxBJFn9Nib8hdoEk8v2BcE5NpdVyxw0SXO3QDsVbmoIVHQ REdVCZVhZd3FIAOQSfa1GcWM35E9vU4ZG4ukt9FwAzdFwHOAU6vMXJCTwJyiQcxftMtH ogmbPOc9QfBwT3tbRGMSLSRHb+zi25eLDCJHaQwhnBmLPNFMC/dM3fawscU3Pp50wRpx +LP1p+sljlepU9zeGl7m3VDxUnLyLqHkBgySWI7xgOv+FxxOQOseTrAQKHkQj4rDZirR 4GE9Nuo2zPjzc/5tIxxqOj44B8KJGooX5JEUMgu+XN+bupIjsGB0vFXbKo+AKk/YOmjt vArg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933495; x=1755538295; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=nbWyNjhRffdizOWiIb7bDk0DH91Nu7zFnwGTY/wxrLs=; b=o5Y0a3rRPTySNoSFjZuAGl0UXOSotCocDjRvP7kaK+cigFCiZ6lqynWhVZGaN4aNoh e4P0T6IUVB9LTmLYx6bC2u3bKXfYdizMRGpDUhIYUqyNa01bymRux1Peu8v9bO1gTA4h B3v6wiHy9MJ5NV5eECAv6NnawaxmMRlTL1rggivS37mndhtOe1WdX9EAAVD2sa3uNIoj 20zxpnovAiwzUWb5Ci5+zADM92uwq7uGDqt/8t3i2fhrenOjDtW1+1DuxhQboH1bT4jp szY5Nf59WiJVucUqIsO1ErItDuQwg4wDE1oGgsWgSyJRodLiCUBs584D6WSgLzrJDOIJ 7VlA== X-Forwarded-Encrypted: i=1; AJvYcCXyTGHk2GgpfkpAtH0edG23uPVnFoaxiiDHT41ml07TEZFkApRGUgHxToaBh5Lop3RxtFZWXw==@lists.linux.dev X-Gm-Message-State: AOJu0YwuYlTZk/vfh68b+s16NYznWxt8oxqDCSlIFW6eQO5o3Z3eISYC SUmT6iuy82EWiI5Iiw65X+oXecmuU9gxter2JkHpCJQb9SfjEJnGmLnUVFqLnqORcEAq11iHjEj YBv+0lw== X-Google-Smtp-Source: AGHT+IHxJ97+AwE076KxPYX/sWcCDY1XqeMHaZ3AGAq4oCcRt8YytBHiFg6jXlxoMu/lw9gst4WNB9FALdI= X-Received: from pfblh2.prod.google.com ([2002:a05:6a00:7102:b0:76b:8c3c:6179]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:b46:b0:76b:f01c:ff08 with SMTP id d2e1a72fcca58-76e0de2de8emr552627b3a.2.1754933495361; Mon, 11 Aug 2025 10:31:35 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:31 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-4-kuniyu@google.com> Subject: [PATCH v2 net-next 03/12] tcp: Simplify error path in inet_csk_accept(). From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When an error occurs in inet_csk_accept(), what we should do is only call release_sock() and set the errno to arg->err. But the path jumps to another label, which introduces unnecessary initialisation and tests for newsk. Let's simplify the error path and remove the redundant NULL checks for newsk. Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Tested-by: syzbot@syzkaller.appspotmail.com --- net/ipv4/inet_connection_sock.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_soc= k.c index 1e2df51427fe..724bd9ed6cd4 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -706,9 +706,9 @@ struct sock *inet_csk_accept(struct sock *sk, struct pr= oto_accept_arg *arg) spin_unlock_bh(&queue->fastopenq.lock); } =20 -out: release_sock(sk); - if (newsk && mem_cgroup_sockets_enabled) { + + if (mem_cgroup_sockets_enabled) { gfp_t gfp =3D GFP_KERNEL | __GFP_NOFAIL; int amt =3D 0; =20 @@ -732,18 +732,17 @@ struct sock *inet_csk_accept(struct sock *sk, struct = proto_accept_arg *arg) =20 release_sock(newsk); } + if (req) reqsk_put(req); =20 - if (newsk) - inet_init_csk_locks(newsk); - + inet_init_csk_locks(newsk); return newsk; + out_err: - newsk =3D NULL; - req =3D NULL; + release_sock(sk); arg->err =3D error; - goto out; + return NULL; } EXPORT_SYMBOL(inet_csk_accept); =20 --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 963682D481A for ; Mon, 11 Aug 2025 17:31:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933499; cv=none; b=B6YL0IaaATPKmgTrBUCQwrPYTBMSW1SsHYZggPkxWIswUd/zWe1O3v8GO0sdqmaN8VtTi5YVcVDHf+JO8F1EQxr5chfSPTkTp+Un6ZZTUehZ6J1Zj67o8SM2nX2C3+jnt9pFFRheGLAKtQa7LfYhFokx3UTTioRBwNQc2zU7al4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933499; c=relaxed/simple; bh=0sASMMf3hdYMOoWJgOc7ZaOQV4MEaeOmZCKjZhVqGRo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=EOIIARTXEaP3VKlLJiFfh+EGvTkUVDYlNmmM/uEd8VNR+KyKFZYhfgqNLF1q1a3cTIVQpYQ60Is17zNGRD4BofpO88hl1P7sHz0OYqdp/zcILG1iMrRRVeGq5oyVnVKqZ2WUxtHVCCUxzVRdcDudad3GFFfCGG4SYvEr/8okXQs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=AhiuphjA; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="AhiuphjA" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-23fe98c50daso36869045ad.3 for ; Mon, 11 Aug 2025 10:31:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933497; x=1755538297; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=t2qfuFeHIs9pZcvOOidK5ttDb4kIntPZhb9KYt5G2e4=; b=AhiuphjAWYB89WoIMUItPFB29+rl4/fQhO1KhyE+PT9QOur/K67UR8pQ5lfG/zhk+Z b4lM/EfhKX+hKeLVy8GL0DpoveCeafmVZWRHBdgboD2DWpkxo3NSm2cztoP7d96obsu+ nzeroqkIL1LGpiJSxmoBH3G7++cZY1fVrl9gTH1+raimjeJe9sXwF8dNd7MVdsBvSw3g LFL52kei5ZiSXfXcbPXQ8QmMZUzY2j/C8OllWFbImVTiSDG4JXyL4zxPyiXfzR/Mts2h hQuh4RQVlO4/8Nm7hhwvEJlMyE3c4on7mxCqMaO8vgjPZyRwkY/j2O3ZRUSnKSI/mI9s O5MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933497; x=1755538297; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=t2qfuFeHIs9pZcvOOidK5ttDb4kIntPZhb9KYt5G2e4=; b=JckrRo4V0b2M0VN1tFB0LgtGJiRq+7WfuKupAYm2bK4MuWjwYmSi+VzERjDoFuehMu g6RQ3Mae7j8ejO23SzJpoakiJgVBXutffjng/VXJm20g2Fv6qrkHxQ9wEKhYqnuYclMx NAH1b/kuloaT8zS/yTmNBtNflARsFijLlipUoa0RIIuqbRIrZdVFIsjCOuvLx9wnNlGl K0pYsiw/VmUQL8hQri5PeLQWwdbFB+U68WY6+pBdMHrzqgFhGKgRJATeB6ZYzuJGPJDQ IrRgIbKea5WOHdTNy/ZRI7ZD16RkV1CsWljIvdfDiunmqOQodrlKfnnbKSa1zNJOS0JA Oukg== X-Forwarded-Encrypted: i=1; AJvYcCV7XjmfXpqOzgjGbPuWjwM7aoSoFawVd9TPhF+h0kcc8/8m+/IbOzYiKBH1aWr1IwVrKalttA==@lists.linux.dev X-Gm-Message-State: AOJu0Yx7fvNd+oeH43v3ZqCeXs0jvWFVTU8jlVSh4Oz+w2hACY1VuKOt E+Wg1TDNQOciuhWSLjv5hlozXOTFRRQgGq4PxfHjMhU6PQ5srrt9MlfUOc7OC8dh6exVj2n+56L EDk5ugw== X-Google-Smtp-Source: AGHT+IFCL/e8m3EpZsorqhDOQWgbVKsvSbTHCyrTvZCPhbJX57+yQJEYtdDdTVRR3b+15GDZLagPnHJ4FnA= X-Received: from pja13.prod.google.com ([2002:a17:90b:548d:b0:321:abeb:1d8a]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1a23:b0:23f:c945:6081 with SMTP id d9443c01a7336-242fc31aeefmr6642605ad.31.1754933496988; Mon, 11 Aug 2025 10:31:36 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:32 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-5-kuniyu@google.com> Subject: [PATCH v2 net-next 04/12] net: Call trace_sock_exceed_buf_limit() for memcg failure with SK_MEM_RECV. From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Initially, trace_sock_exceed_buf_limit() was invoked when __sk_mem_raise_allocated() failed due to the memcg limit or the global limit. However, commit d6f19938eb031 ("net: expose sk wmem in sock_exceed_buf_limit tracepoint") somehow suppressed the event only when memcg failed to charge for SK_MEM_RECV, although the memcg failure for SK_MEM_SEND still triggers the event. Let's restore the event for SK_MEM_RECV. Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Tested-by: syzbot@syzkaller.appspotmail.com --- net/core/sock.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/net/core/sock.c b/net/core/sock.c index 7c26ec8dce63..380bc1aa6982 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -3354,8 +3354,7 @@ int __sk_mem_raise_allocated(struct sock *sk, int siz= e, int amt, int kind) } } =20 - if (kind =3D=3D SK_MEM_SEND || (kind =3D=3D SK_MEM_RECV && charged)) - trace_sock_exceed_buf_limit(sk, prot, allocated, kind); + trace_sock_exceed_buf_limit(sk, prot, allocated, kind); =20 sk_memory_allocated_sub(sk, amt); =20 --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 52D9B2D6E4F for ; Mon, 11 Aug 2025 17:31:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933500; cv=none; b=jfxQAKa7xWhrjl/F5yDo4Su0rrQw47m2TpQOwfmULtwtBtuasdiq7hYZpOsZByw+coD8Eb03q4vgaC2Ab9Ui3MnklsYbkeRCaDRBVe7ZN1EMD80hzrrwcDspz1hmGjwR2IP56VmfQEYuFJQjeeL1TK1oSF+aUfm7ap9BCdTH3lI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933500; c=relaxed/simple; bh=X8eX2iq6i1SdpjO7hV/2ZT1qtsDqnu8t+51xQUHLbiQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=GviNlF5EMkdPCRwTRVkJ8SWVq/r2//RmCPDmjwMJa9X36u3gXAEC/bypEaiLfJ51Ytib5whogJLpRcmFQmcQwurFhUJy7QeawAJhnybz4dnwqnZfOkk70zw4FPq+wfQcXkXUtZfgkmfrJ0S7LWEEcktK7YXXd4VTrlR7/YrCkh4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=DLlA/hb7; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="DLlA/hb7" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-242abac2cb4so53547025ad.0 for ; Mon, 11 Aug 2025 10:31:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933498; x=1755538298; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=uzfVGGcr+sVaGRRL1v88D9i+PBN94epKYHJgJ64bEQY=; b=DLlA/hb7Oc7E/y1ZUD0myQURCJVMvMbX4CUissHz/rKJx7/ihy/UGQJOn87RctLeaR 5RPl3E1QobJbhNJyzUErF1t83G7DKouoyfdZ0XkHyg7W7nOALYPY0oypK6+K2DXgaZdE LxEczyq/iG1sy9lXzFJjy05JO9MEqAU4GA9r9Q816IlkWa9fMCSFLHV07AE161nJmp/e h770mRpSfUcNjHJP9r5QL2VRwtSotvnx20wlL8Ljml41D6jeXe+ghkSEopXI2XR12i4S dnVWzO0tqGqfDMErwFTSnhcYGBtT9zrVPSj0quPyVZ0a8sLBljxj+zUY95pwPn5hUO4Q KqLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933498; x=1755538298; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=uzfVGGcr+sVaGRRL1v88D9i+PBN94epKYHJgJ64bEQY=; b=mlP6SdkXArBXIXPfLWxazX2IRq8lrPUKTMEIErqYlTzEhReVNQrA5zQnroT5sw6k7h xaNJQrcbG9hLYOyuIqP958ytarQ0eSUeoeoRewdRlEgaptT4+oUGNyBjSPBPzhIIW49q a3msoaDeNosL6vtibw1fYnU4OptCY78wP8Mw/XtJzhkq9Yf8GiClg+KcwOZi0zZslw1G 1+K+EhJLz5qjMGXp2mns628AIo3YAIglmx8rlJSJHx69YL4TsP89rQmOZRlSsUGwfm4g iXlm6K+baPsmNTwdlxYbKJOeW0D3+NhYImDaY2o/6MFv1vEzi6hGsowGX8qW1Dx4ASK0 nm5A== X-Forwarded-Encrypted: i=1; AJvYcCUSf0hi6fVm3uWGPLNFiBQ6YimSrzL5m3d397QwPMon7cXF9SDiw6yOih5mUwySZ9GAntpeAQ==@lists.linux.dev X-Gm-Message-State: AOJu0YwxGpVHSvd7sc9P5fXMe86EZYzUc/7UDOhvo3on7cGa5laBerxL WrsxXjkDLzr4pdSKmFRBVVul34h/bb0IRbgBtQO5tq8vKbri5bWF9xbAvURfMsDVs+N6iTBdlk9 equ3dOw== X-Google-Smtp-Source: AGHT+IG9Zlocy4eDqCS5oKFJ6Lh7wIqM9jd+N5Kyl95s+RAxxPEZ9AxG7sDpQwLNd7KdpVUzfZOq2F2IpGg= X-Received: from plbmv15.prod.google.com ([2002:a17:903:b8f:b0:240:3c5f:99d8]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ea0f:b0:240:9ff:d546 with SMTP id d9443c01a7336-242c1ecb9c1mr190995095ad.6.1754933498485; Mon, 11 Aug 2025 10:31:38 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:33 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-6-kuniyu@google.com> Subject: [PATCH v2 net-next 05/12] net: Clean up __sk_mem_raise_allocated(). From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In __sk_mem_raise_allocated(), charged is initialised as true due to the weird condition removed in the previous patch. It makes the variable unreliable by itself, so we have to check another variable, memcg, in advance. Also, we will factorise the common check below for memcg later. if (mem_cgroup_sockets_enabled && sk->sk_memcg) As a prep, let's initialise charged as false and memcg as NULL. Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Tested-by: syzbot@syzkaller.appspotmail.com --- net/core/sock.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/net/core/sock.c b/net/core/sock.c index 380bc1aa6982..000940ecf360 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -3263,15 +3263,16 @@ EXPORT_SYMBOL(sk_wait_data); */ int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind) { - struct mem_cgroup *memcg =3D mem_cgroup_sockets_enabled ? sk->sk_memcg : = NULL; struct proto *prot =3D sk->sk_prot; - bool charged =3D true; + struct mem_cgroup *memcg =3D NULL; + bool charged =3D false; long allocated; =20 sk_memory_allocated_add(sk, amt); allocated =3D sk_memory_allocated(sk); =20 - if (memcg) { + if (mem_cgroup_sockets_enabled && sk->sk_memcg) { + memcg =3D sk->sk_memcg; charged =3D mem_cgroup_charge_skmem(memcg, amt, gfp_memcg_charge()); if (!charged) goto suppress_allocation; @@ -3358,7 +3359,7 @@ int __sk_mem_raise_allocated(struct sock *sk, int siz= e, int amt, int kind) =20 sk_memory_allocated_sub(sk, amt); =20 - if (memcg && charged) + if (charged) mem_cgroup_uncharge_skmem(memcg, amt); =20 return 0; --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A38872D6E60 for ; Mon, 11 Aug 2025 17:31:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933502; cv=none; b=jBTeWDDRoX/Qxao13JOeUENuie9zopqXcVLAu1rq/H2M/NqD/SlkipWVGd+PhclB5rGBk/UbUby5MnWnskr9wxKTrbH7EgXGN9DJGq3fUSwLpP9fCV7etxj0xibx9o3M8JyXfdqYpXB4N8MaMWA8zWRYQIMrvdqc9qATAmSrDnk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933502; c=relaxed/simple; bh=djnZb6zv07TTJapDcbZzy/mNZjUZFqFs7UwvKkwxTow=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=f83U9UqOV7Z8I9iYYHwN2jPx74D8xt902LcjYpiv7jOO7m8/iLDE052vho/yv2x5DkEw1qSOIW+9kUwGay45P92QVTJNL98lZCB2241KL/49tFlizdg+jA3hHQdnXMg/ovAJqHH6dhydRwXs0cYPMm1GbxJdA+qZwu7Z3+zWjMk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=mdMDK7Ax; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="mdMDK7Ax" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-242aa2e4887so100992645ad.3 for ; Mon, 11 Aug 2025 10:31:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933500; x=1755538300; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=1evf9NP8gzujZSmc68LKGIYtEyxxeyxaSo7A1dSfcIM=; b=mdMDK7AxZ4iD1JxVWN2kQ1cr8qBWFpWxjaIgvGGLgfTHZSRQuLmi5mXnmdU84/yoW0 OxjHwRiIqYnwVms26PEK8F1yLVTO39k0/9EXnooyi33MMxvwbtO6t+6vJnQjllKmjDg/ ELh1PQKh58bbZJ1WRHZYx43CiKhLAkh14jJUpl+UaVY4QosTjZAY1zgBCHNVon+r1B8J n2y+ApbSBEYWn0gd4gt65RT8ucFtSs7TONKUp1iY4kPiNIaUcGbi/QXoLdOPtbZYLZws 1WDGTXqPG8mzuU/1nlRdg+ZucxHiQM13zcuwrxSRaVjDBK4BKXFwm45Mg4DeJcFPii5l mJww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933500; x=1755538300; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=1evf9NP8gzujZSmc68LKGIYtEyxxeyxaSo7A1dSfcIM=; b=loI3y4QiE96m2k2SE+mSRHAeip35/R8QuwqVSVnrvep/wTi3oD8yJH0joivRI0h46Q j/l/Us5ZXrnkw9V+AC+eGE2s9Jkm4pCU09QynGn1fILE3ZCFLJ2Oxt2wwhfB6zLy/298 a4aSTJGj5X6C1KWx5Bjab1KqsmRWduI7gzzLD09wfyqWYLY2dVVzkdA/L1KcTgM6vO6z Bl5SjkfIiYjgKfoIoNLFiG6lZpefmoIVC3CnFTuBvKn/dFDpNCe7ktaxBcPMGuAYimce nVmbVe5feCtrIAXPkTOM8viknQFGRit+19PBVvI6knDODw6riP4VDt76/jC+WTW5VugZ 0PSw== X-Forwarded-Encrypted: i=1; AJvYcCWt2vaHIWIy5dB9iokvhPtJ2ver36fnAEwk/sdvkHRNaZ6Mr6YOlZB07fbV+qTCIhk1pysviA==@lists.linux.dev X-Gm-Message-State: AOJu0YyNASi64fdVofpybvlMHhcWP/CDD8Va4sSuhZGB2LWp/2yKSKIB SKYc4IU0Nar5UJ7hieO4UjNzc7BKLFdl3gt5xWPDOzadudA60euyfvY29I5KIzPB4Ju6KS7vUTA QYBPUgw== X-Google-Smtp-Source: AGHT+IHeBDKPPyqvP1rUR5CAMk5yyduE4pb1HwUuCqZE282C8A61+qQgO/7HcPgBMgw3doePxcL7KhLi5Vs= X-Received: from pjbtb5.prod.google.com ([2002:a17:90b:53c5:b0:321:ab51:e32a]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ea08:b0:240:4faa:75cd with SMTP id d9443c01a7336-242c225554emr205009335ad.48.1754933499961; Mon, 11 Aug 2025 10:31:39 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:34 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-7-kuniyu@google.com> Subject: [PATCH v2 net-next 06/12] net-memcg: Introduce mem_cgroup_from_sk(). From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" We will store a flag in the lowest bit of sk->sk_memcg. Then, directly dereferencing sk->sk_memcg will be illegal, and we do not want to allow touching the raw sk->sk_memcg in many places. Let's introduce mem_cgroup_from_sk(). Other places accessing the raw sk->sk_memcg will be converted later. Note that we cannot define the helper as an inline function in memcontrol.h as we cannot access any fields of struct sock there due to circular dependency, so it is placed in sock.h. Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Tested-by: syzbot@syzkaller.appspotmail.com --- include/net/sock.h | 12 ++++++++++++ mm/memcontrol.c | 14 +++++++++----- net/ipv4/inet_connection_sock.c | 2 +- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/include/net/sock.h b/include/net/sock.h index c8a4b283df6f..811f95ea8d00 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -2594,6 +2594,18 @@ static inline gfp_t gfp_memcg_charge(void) return in_softirq() ? GFP_ATOMIC : GFP_KERNEL; } =20 +#ifdef CONFIG_MEMCG +static inline struct mem_cgroup *mem_cgroup_from_sk(const struct sock *sk) +{ + return sk->sk_memcg; +} +#else +static inline struct mem_cgroup *mem_cgroup_from_sk(const struct sock *sk) +{ + return NULL; +} +#endif + static inline long sock_rcvtimeo(const struct sock *sk, bool noblock) { return noblock ? 0 : READ_ONCE(sk->sk_rcvtimeo); diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 08c6e06750ac..2db7df32fd7c 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5020,18 +5020,22 @@ void mem_cgroup_sk_alloc(struct sock *sk) =20 void mem_cgroup_sk_free(struct sock *sk) { - if (sk->sk_memcg) - css_put(&sk->sk_memcg->css); + struct mem_cgroup *memcg =3D mem_cgroup_from_sk(sk); + + if (memcg) + css_put(&memcg->css); } =20 void mem_cgroup_sk_inherit(const struct sock *sk, struct sock *newsk) { - if (sk->sk_memcg =3D=3D newsk->sk_memcg) + struct mem_cgroup *memcg =3D mem_cgroup_from_sk(sk); + + if (memcg =3D=3D mem_cgroup_from_sk(newsk)) return; =20 mem_cgroup_sk_free(newsk); - css_get(&sk->sk_memcg->css); - newsk->sk_memcg =3D sk->sk_memcg; + css_get(&memcg->css); + newsk->sk_memcg =3D memcg; } =20 /** diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_soc= k.c index 724bd9ed6cd4..93569bbe00f4 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -718,7 +718,7 @@ struct sock *inet_csk_accept(struct sock *sk, struct pr= oto_accept_arg *arg) lock_sock(newsk); =20 mem_cgroup_sk_alloc(newsk); - if (newsk->sk_memcg) { + if (mem_cgroup_from_sk(newsk)) { /* The socket has not been accepted yet, no need * to look at newsk->sk_wmem_queued. */ --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 741B22D6E77 for ; Mon, 11 Aug 2025 17:31:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933503; cv=none; b=YbAJKJ/+RyMjs/HO3yZxQwI3CL9KnJ4ptizOiLs0HTrPHTzR8oNGQLbDtZ8+W9KHLZM+by/o4rzKTK2K7/13azo3bpAcdU2sfJrTwVT5+LsB2P5KzUHWMS8eyagVHWuGaS4qtuv1yGuwQe/2hSvak6d6sURoZcYjmxJkjtqw1Wg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933503; c=relaxed/simple; bh=scmT+L01eD7wAA+tQ1VYtZfqLo/bIBN/pToeFw110+w=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=KDCa6Pf26G3V6ZjSrhJSbo96Nx+oAhV4z9YrdTWP+FI5xotvDrqyhlKs4XqUoHfv/ZaPnsvXz6gA2GVazIuPnYaNaXUCrR3r1X+9hi/bXLGeV2Xk21svJ2FH+hRWXLGR1JdbtudiaWXzO3jC5KpfmqDTfhf/0RDVVgIOHHuzHUk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=a3aleMfF; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="a3aleMfF" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-23fe984fe57so72236465ad.0 for ; Mon, 11 Aug 2025 10:31:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933502; x=1755538302; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=/1GHMwnAvIaqWLJyXzy2eGeZ3loP62R3df/KRW2nnvI=; b=a3aleMfFuIhI23+JBwvPDVJmzKr2FFkHDTPFn1eUD0ezB0MNhJIPUba/rRn5tm2Jk2 HY+BUDG5ur7XfbIku12DIL8CQu1cdKG0KY9EH4NHfpJb+Oz3fyUcxj7zH1drYv4AW1+4 C51gV/SmRDkMAldKQ3XV68AsJ8y1BPW5PHHVkTS4MzabDyGW1iX37v8q802wRtUmpKZI 3TW+qHfXhpJN7OT3FOx40ibCvcuPL47opPqtZ3+lcfaMnd2swor3RS55SmV7sjgpA1Tr KWm2PSqQW/k1rqyCINg/Vk9osZZzfjnPcsYQE7FCh8FKkhC4SMIQ4Hp/bTC9yU1kft8z Uz4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933502; x=1755538302; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=/1GHMwnAvIaqWLJyXzy2eGeZ3loP62R3df/KRW2nnvI=; b=LsISOncD98WzEpmYx+UQT44iuvH8jyMGuRa970t0OrI6vsgodv+upXRKhMzefWiMep fSuY5icA81fmgMRHzcxH6NszdbXBydNMTw06qYqBgGuFK3YaEkUlJ3QeyemM/p+f1ejo 7q/xJjhnXf56Eo1/P8p8+Pzey1UEWGeandj4V7U+sSvTOvmie7HbXvQN4Bdq6YcT/ejV Fvy/4/IbLg+UssfdByIorB3rPkye6XnwmYH/yyHIlv7gSwGKFNTvrTAJO0JM2WJ0UYZZ PB/73lRgDBNv+xMHmxCQcpAEmqj7gVYzkdwG9nEgSt8RQE8fZk5qbTozLrar1a4/RHlW KCUg== X-Forwarded-Encrypted: i=1; AJvYcCUJON6tbzV4jEv4iiFr53W/GYKwt9j+bUDrlXoaobkVXtyZbwYHs9ZgVTyfKeHzRnrHv7+UJg==@lists.linux.dev X-Gm-Message-State: AOJu0Yzcdhiq4SYOpP9UTsBwfpbvKKPj6hQTEXtFKSNqSF0doRz44RsH j5cFpW9n02+poOCujMAKmBd7CtbjW0+6tjFsgrTatYS0VXRphZ4MHZjc5QEOG7tAgWVPeuJFHTI SQNBpFg== X-Google-Smtp-Source: AGHT+IFMNgVf+Ayq9j3qMwMUXApKfzqqa1VJ0zOmoONCV2R4q5dCIl1lgeXBjm87U9qu7vPQAjok3apSCjM= X-Received: from pjxx5.prod.google.com ([2002:a17:90b:58c5:b0:31f:b2f:aeed]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ea08:b0:240:4faa:75cd with SMTP id d9443c01a7336-242c225554emr205010325ad.48.1754933501503; Mon, 11 Aug 2025 10:31:41 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:35 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-8-kuniyu@google.com> Subject: [PATCH v2 net-next 07/12] net-memcg: Introduce mem_cgroup_sk_enabled(). From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The socket memcg feature is enabled by a static key and only works for non-root cgroup. We check both conditions in many places. Let's factorise it as a helper function. Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Tested-by: syzbot@syzkaller.appspotmail.com --- include/net/proto_memory.h | 2 +- include/net/sock.h | 10 ++++++++++ include/net/tcp.h | 2 +- net/core/sock.c | 6 +++--- net/ipv4/tcp_output.c | 2 +- net/mptcp/subflow.c | 2 +- 6 files changed, 17 insertions(+), 7 deletions(-) diff --git a/include/net/proto_memory.h b/include/net/proto_memory.h index a6ab2f4f5e28..859e63de81c4 100644 --- a/include/net/proto_memory.h +++ b/include/net/proto_memory.h @@ -31,7 +31,7 @@ static inline bool sk_under_memory_pressure(const struct = sock *sk) if (!sk->sk_prot->memory_pressure) return false; =20 - if (mem_cgroup_sockets_enabled && sk->sk_memcg && + if (mem_cgroup_sk_enabled(sk) && mem_cgroup_under_socket_pressure(sk->sk_memcg)) return true; =20 diff --git a/include/net/sock.h b/include/net/sock.h index 811f95ea8d00..3efdf680401d 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -2599,11 +2599,21 @@ static inline struct mem_cgroup *mem_cgroup_from_sk= (const struct sock *sk) { return sk->sk_memcg; } + +static inline bool mem_cgroup_sk_enabled(const struct sock *sk) +{ + return mem_cgroup_sockets_enabled && mem_cgroup_from_sk(sk); +} #else static inline struct mem_cgroup *mem_cgroup_from_sk(const struct sock *sk) { return NULL; } + +static inline bool mem_cgroup_sk_enabled(const struct sock *sk) +{ + return false; +} #endif =20 static inline long sock_rcvtimeo(const struct sock *sk, bool noblock) diff --git a/include/net/tcp.h b/include/net/tcp.h index 526a26e7a150..9f01b6be6444 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -275,7 +275,7 @@ extern unsigned long tcp_memory_pressure; /* optimized version of sk_under_memory_pressure() for TCP sockets */ static inline bool tcp_under_memory_pressure(const struct sock *sk) { - if (mem_cgroup_sockets_enabled && sk->sk_memcg && + if (mem_cgroup_sk_enabled(sk) && mem_cgroup_under_socket_pressure(sk->sk_memcg)) return true; =20 diff --git a/net/core/sock.c b/net/core/sock.c index 000940ecf360..ab658fe23e1e 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1032,7 +1032,7 @@ static int sock_reserve_memory(struct sock *sk, int b= ytes) bool charged; int pages; =20 - if (!mem_cgroup_sockets_enabled || !sk->sk_memcg || !sk_has_account(sk)) + if (!mem_cgroup_sk_enabled(sk) || !sk_has_account(sk)) return -EOPNOTSUPP; =20 if (!bytes) @@ -3271,7 +3271,7 @@ int __sk_mem_raise_allocated(struct sock *sk, int siz= e, int amt, int kind) sk_memory_allocated_add(sk, amt); allocated =3D sk_memory_allocated(sk); =20 - if (mem_cgroup_sockets_enabled && sk->sk_memcg) { + if (mem_cgroup_sk_enabled(sk)) { memcg =3D sk->sk_memcg; charged =3D mem_cgroup_charge_skmem(memcg, amt, gfp_memcg_charge()); if (!charged) @@ -3398,7 +3398,7 @@ void __sk_mem_reduce_allocated(struct sock *sk, int a= mount) { sk_memory_allocated_sub(sk, amount); =20 - if (mem_cgroup_sockets_enabled && sk->sk_memcg) + if (mem_cgroup_sk_enabled(sk)) mem_cgroup_uncharge_skmem(sk->sk_memcg, amount); =20 if (sk_under_global_memory_pressure(sk) && diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index caf11920a878..37fb320e6f70 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -3578,7 +3578,7 @@ void sk_forced_mem_schedule(struct sock *sk, int size) sk_forward_alloc_add(sk, amt << PAGE_SHIFT); sk_memory_allocated_add(sk, amt); =20 - if (mem_cgroup_sockets_enabled && sk->sk_memcg) + if (mem_cgroup_sk_enabled(sk)) mem_cgroup_charge_skmem(sk->sk_memcg, amt, gfp_memcg_charge() | __GFP_NOFAIL); } diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 6fb635a95baf..4874147e0b17 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1723,7 +1723,7 @@ static void mptcp_attach_cgroup(struct sock *parent, = struct sock *child) } #endif /* CONFIG_SOCK_CGROUP_DATA */ =20 - if (mem_cgroup_sockets_enabled && parent->sk_memcg) + if (mem_cgroup_sk_enabled(parent)) mem_cgroup_sk_inherit(parent, child); } =20 --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 159782D97AC for ; Mon, 11 Aug 2025 17:31:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933505; cv=none; b=ihEamS6RLhMAcArvQKT1xpkceAM9TManIm1kWk6WQUH7yp7UKRbsr4nVgk407MAWB7/s6K0ACoB5OHEatbhGKazI6ld6Eu8qEIojjGOOMKng9ivFu6iS3nVifb8XpyhwAigfZtP3OTswLMAF2H+fD5e9/mEHvmLjnQrkmRkXHtU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933505; c=relaxed/simple; bh=gaEivgXfEYeeBWuRFL2zEmiDtbCL7eGp6LY2EyRWEnA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=rISoWpDfdBjvv+rQoJqvZE86tJfCd8oPdApRQgXEmI+hPm4gr8/RjNTDb21VyPzDEscvR8MSUBWDaQRYPFzRS31MrQTrrXUNRoPedhwHKGQnxNoe4FzBplrxPLYCua4ixKZYVXSMFzbUgV78K/+rFbeoCIMZsPp02WgDcEEjmk0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=zRMECfwE; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="zRMECfwE" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b38ec062983so3508352a12.3 for ; Mon, 11 Aug 2025 10:31:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933503; x=1755538303; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=c+1u6jMeY2ieN9JTNQfSbMa5Js54FEKg2f0HWf6b31A=; b=zRMECfwEams+kkKSVxCRC2ciNsStJV8UHHBHk3pfXGDI4LJgk606Dn4S36VRWhBOGg ctaWwJMH33ZLbxpw4ptgZqXaL5tbD5osiT06k6A7Q4SyDZqZ+LIkECGs2p6aBVmUA83Z kFMOcRXTGme4ZqoZhoMNtpmRfKFNkmg5dRcaEwZYzu6vO+z3ogz58LGyjsklQEPGWEeF FOYpydOPHRaCoeRZ5+F/8JqwwCn5LLEzsrjeJTAv09OHOxSfi23MmX3sMECDdOnqhIN/ TSqaDxjoXuMT30tHa9uCxrrwEcx+IfwAokEqVIJ8C3EultYGYCwLeqgKxXYIGmcDNtwo S2zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933503; x=1755538303; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=c+1u6jMeY2ieN9JTNQfSbMa5Js54FEKg2f0HWf6b31A=; b=KRAcPG4/rGgtGCtCNbVXJoHHW2UjDRpF+x9yiDucty4s6uAFtZ7ViHwZ9avpheCDKc 69eh9kOn7Ia5miYo9D/tZnOdRzfax50l8/pochsckroYpl2wZilXAPcfrEMwyYmOu/Kq uY/nNRQibU3vZggAPfWoOlsFZmgrmzxH9e113mJHDzy+rcBeA8xzKuUkVmDON4oKquqz 4S2nEUxJbPIcLzPbHbyoI4rVIXTg8qevV6Jc8a6NZB9TfxPIBwolqQlfqeOu/R8V3F8D eTjZM2Vdxrq70bNjzji/JSlgl58qTUicCEiE5T2t2r616xI4F4A/+CkBIHGsN/Y1cYRk UO+g== X-Forwarded-Encrypted: i=1; AJvYcCUJo/+VKi2wAeqGfng6UrqEeQsNWMg1P6zHodXcGZWGWQQCqga9iSwBsRVHemKPCDCL5RO7Ag==@lists.linux.dev X-Gm-Message-State: AOJu0Yx+l3g1Nh0xrDpaNSFsO2B9wj8YFpJoLA2U5D3BUR/Bmj7ag+s7 unSsYuASKDg4RqRcnuuA94rVMsMG1bChs4+ec2QLJJX6aSYYzH83ziMbugxnA55elNOHXdVQnfg ZkKTPnA== X-Google-Smtp-Source: AGHT+IF+332pvw2sB451OsHxyvelGplXYYulyN1CCJNVXmCoa3JJJxGz6VI5u5TgIIL1LHaViiMtLlcnWFI= X-Received: from plnd3.prod.google.com ([2002:a17:903:1983:b0:23f:efa6:2e49]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:32ca:b0:234:f4da:7eed with SMTP id d9443c01a7336-242fc3a34d1mr5329425ad.44.1754933503244; Mon, 11 Aug 2025 10:31:43 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:36 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-9-kuniyu@google.com> Subject: [PATCH v2 net-next 08/12] net-memcg: Pass struct sock to mem_cgroup_sk_(un)?charge(). From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" We will store a flag in the lowest bit of sk->sk_memcg. Then, we cannot pass the raw pointer to mem_cgroup_charge_skmem() and mem_cgroup_uncharge_skmem(). Let's pass struct sock to the functions. While at it, they are renamed to match other functions starting with mem_cgroup_sk_. Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Tested-by: syzbot@syzkaller.appspotmail.com --- include/linux/memcontrol.h | 29 ++++++++++++++++++++++++----- mm/memcontrol.c | 18 +++++++++++------- net/core/sock.c | 24 +++++++++++------------- net/ipv4/inet_connection_sock.c | 2 +- net/ipv4/tcp_output.c | 3 +-- 5 files changed, 48 insertions(+), 28 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 25921fbec685..0837d3de3a68 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1596,15 +1596,16 @@ static inline void mem_cgroup_flush_foreign(struct = bdi_writeback *wb) #endif /* CONFIG_CGROUP_WRITEBACK */ =20 struct sock; -bool mem_cgroup_charge_skmem(struct mem_cgroup *memcg, unsigned int nr_pag= es, - gfp_t gfp_mask); -void mem_cgroup_uncharge_skmem(struct mem_cgroup *memcg, unsigned int nr_p= ages); #ifdef CONFIG_MEMCG extern struct static_key_false memcg_sockets_enabled_key; #define mem_cgroup_sockets_enabled static_branch_unlikely(&memcg_sockets_e= nabled_key) + void mem_cgroup_sk_alloc(struct sock *sk); void mem_cgroup_sk_free(struct sock *sk); void mem_cgroup_sk_inherit(const struct sock *sk, struct sock *newsk); +bool mem_cgroup_sk_charge(const struct sock *sk, unsigned int nr_pages, + gfp_t gfp_mask); +void mem_cgroup_sk_uncharge(const struct sock *sk, unsigned int nr_pages); =20 #if BITS_PER_LONG < 64 static inline void mem_cgroup_set_socket_pressure(struct mem_cgroup *memcg) @@ -1660,13 +1661,31 @@ void set_shrinker_bit(struct mem_cgroup *memcg, int= nid, int shrinker_id); void reparent_shrinker_deferred(struct mem_cgroup *memcg); #else #define mem_cgroup_sockets_enabled 0 -static inline void mem_cgroup_sk_alloc(struct sock *sk) { }; -static inline void mem_cgroup_sk_free(struct sock *sk) { }; + +static inline void mem_cgroup_sk_alloc(struct sock *sk) +{ +} + +static inline void mem_cgroup_sk_free(struct sock *sk) +{ +} =20 static inline void mem_cgroup_sk_inherit(const struct sock *sk, struct soc= k *newsk) { } =20 +static inline bool mem_cgroup_sk_charge(const struct sock *sk, + unsigned int nr_pages, + gfp_t gfp_mask) +{ + return false; +} + +static inline void mem_cgroup_sk_uncharge(const struct sock *sk, + unsigned int nr_pages) +{ +} + static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *mem= cg) { return false; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 2db7df32fd7c..d32b7a547f42 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5039,17 +5039,19 @@ void mem_cgroup_sk_inherit(const struct sock *sk, s= truct sock *newsk) } =20 /** - * mem_cgroup_charge_skmem - charge socket memory - * @memcg: memcg to charge + * mem_cgroup_sk_charge - charge socket memory + * @sk: socket in memcg to charge * @nr_pages: number of pages to charge * @gfp_mask: reclaim mode * * Charges @nr_pages to @memcg. Returns %true if the charge fit within * @memcg's configured limit, %false if it doesn't. */ -bool mem_cgroup_charge_skmem(struct mem_cgroup *memcg, unsigned int nr_pag= es, - gfp_t gfp_mask) +bool mem_cgroup_sk_charge(const struct sock *sk, unsigned int nr_pages, + gfp_t gfp_mask) { + struct mem_cgroup *memcg =3D mem_cgroup_from_sk(sk); + if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) return memcg1_charge_skmem(memcg, nr_pages, gfp_mask); =20 @@ -5062,12 +5064,14 @@ bool mem_cgroup_charge_skmem(struct mem_cgroup *mem= cg, unsigned int nr_pages, } =20 /** - * mem_cgroup_uncharge_skmem - uncharge socket memory - * @memcg: memcg to uncharge + * mem_cgroup_sk_uncharge - uncharge socket memory + * @sk: socket in memcg to uncharge * @nr_pages: number of pages to uncharge */ -void mem_cgroup_uncharge_skmem(struct mem_cgroup *memcg, unsigned int nr_p= ages) +void mem_cgroup_sk_uncharge(const struct sock *sk, unsigned int nr_pages) { + struct mem_cgroup *memcg =3D mem_cgroup_from_sk(sk); + if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) { memcg1_uncharge_skmem(memcg, nr_pages); return; diff --git a/net/core/sock.c b/net/core/sock.c index ab658fe23e1e..5537ca263858 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1041,8 +1041,8 @@ static int sock_reserve_memory(struct sock *sk, int b= ytes) pages =3D sk_mem_pages(bytes); =20 /* pre-charge to memcg */ - charged =3D mem_cgroup_charge_skmem(sk->sk_memcg, pages, - GFP_KERNEL | __GFP_RETRY_MAYFAIL); + charged =3D mem_cgroup_sk_charge(sk, pages, + GFP_KERNEL | __GFP_RETRY_MAYFAIL); if (!charged) return -ENOMEM; =20 @@ -1054,7 +1054,7 @@ static int sock_reserve_memory(struct sock *sk, int b= ytes) */ if (allocated > sk_prot_mem_limits(sk, 1)) { sk_memory_allocated_sub(sk, pages); - mem_cgroup_uncharge_skmem(sk->sk_memcg, pages); + mem_cgroup_sk_uncharge(sk, pages); return -ENOMEM; } sk_forward_alloc_add(sk, pages << PAGE_SHIFT); @@ -3263,17 +3263,16 @@ EXPORT_SYMBOL(sk_wait_data); */ int __sk_mem_raise_allocated(struct sock *sk, int size, int amt, int kind) { + bool memcg_enabled =3D false, charged =3D false; struct proto *prot =3D sk->sk_prot; - struct mem_cgroup *memcg =3D NULL; - bool charged =3D false; long allocated; =20 sk_memory_allocated_add(sk, amt); allocated =3D sk_memory_allocated(sk); =20 if (mem_cgroup_sk_enabled(sk)) { - memcg =3D sk->sk_memcg; - charged =3D mem_cgroup_charge_skmem(memcg, amt, gfp_memcg_charge()); + memcg_enabled =3D true; + charged =3D mem_cgroup_sk_charge(sk, amt, gfp_memcg_charge()); if (!charged) goto suppress_allocation; } @@ -3347,10 +3346,9 @@ int __sk_mem_raise_allocated(struct sock *sk, int si= ze, int amt, int kind) */ if (sk->sk_wmem_queued + size >=3D sk->sk_sndbuf) { /* Force charge with __GFP_NOFAIL */ - if (memcg && !charged) { - mem_cgroup_charge_skmem(memcg, amt, - gfp_memcg_charge() | __GFP_NOFAIL); - } + if (memcg_enabled && !charged) + mem_cgroup_sk_charge(sk, amt, + gfp_memcg_charge() | __GFP_NOFAIL); return 1; } } @@ -3360,7 +3358,7 @@ int __sk_mem_raise_allocated(struct sock *sk, int siz= e, int amt, int kind) sk_memory_allocated_sub(sk, amt); =20 if (charged) - mem_cgroup_uncharge_skmem(memcg, amt); + mem_cgroup_sk_uncharge(sk, amt); =20 return 0; } @@ -3399,7 +3397,7 @@ void __sk_mem_reduce_allocated(struct sock *sk, int a= mount) sk_memory_allocated_sub(sk, amount); =20 if (mem_cgroup_sk_enabled(sk)) - mem_cgroup_uncharge_skmem(sk->sk_memcg, amount); + mem_cgroup_sk_uncharge(sk, amount); =20 if (sk_under_global_memory_pressure(sk) && (sk_memory_allocated(sk) < sk_prot_mem_limits(sk, 0))) diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_soc= k.c index 93569bbe00f4..0ef1eacd539d 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -727,7 +727,7 @@ struct sock *inet_csk_accept(struct sock *sk, struct pr= oto_accept_arg *arg) } =20 if (amt) - mem_cgroup_charge_skmem(newsk->sk_memcg, amt, gfp); + mem_cgroup_sk_charge(newsk, amt, gfp); kmem_cache_charge(newsk, gfp); =20 release_sock(newsk); diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 37fb320e6f70..dfbac0876d96 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -3579,8 +3579,7 @@ void sk_forced_mem_schedule(struct sock *sk, int size) sk_memory_allocated_add(sk, amt); =20 if (mem_cgroup_sk_enabled(sk)) - mem_cgroup_charge_skmem(sk->sk_memcg, amt, - gfp_memcg_charge() | __GFP_NOFAIL); + mem_cgroup_sk_charge(sk, amt, gfp_memcg_charge() | __GFP_NOFAIL); } =20 /* Send a FIN. The caller locks the socket for us. --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 924712DE1F0 for ; Mon, 11 Aug 2025 17:31:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933507; cv=none; b=mqwv8DnGbj+iguTRMwITAPlsAz+LUe2uOcbrZ6tEK3f2T1x5WrYqUQqB2ms0T+nLsxcNA1M08NGj4BztMfdPF/GlgGKJYxPvLEuGe6Mqw7VXKfQDHoPHFYjEZ4p0uINvurNzGGVI0fMWxikHcT0ySjxvfsspRbviN9tyXCbf/fU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933507; c=relaxed/simple; bh=ZAz1mVorVRFB618WT7mmuym45O0GXG2XAc0+SY/lJcs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=tgz5ne4lQjpcANVFWCZmzoVUmynSoDa3EWM4/G2lVZ5yOZV+PM2NTOAo6FtCoWkIlFNqKy72Q48gp8qFsS+YDYeSqRFqZriTWLIL2fpzqPE6GNNLmSP3Bt+H+qXbsUZ0L5256T471T9BKxiqaCWe57Wlhpe5zK8eKUQ5b/nKgQs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=3BMyvIjX; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="3BMyvIjX" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-2403e4c82dbso36335605ad.0 for ; Mon, 11 Aug 2025 10:31:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933505; x=1755538305; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=M5aWSC3VweCjbJoCLklfizXMRwOKGjiP4PRbbUtyan4=; b=3BMyvIjXrzY4TpLL98sKQiBU4jX5LMoD3Xc6th1mnSVHeWtMXAPG0aTX9OERixZWmO tOWo7t5WV6gmLUWbXe73Odc1xJjKvemy9tzK9wkSbpyPkjQb9MM7rKSqtx/p2o92ebw7 H6DpcZFQn+X1IaHvuqRbXR1ydjrGPZDL6yleABn+YaCTD1USL8CNxZjFDW3d7xjhdvm3 88KPasIDo9cGX8SDPvGT8PrJCSf07AgUCdum7CLRb30hTsTS+d/YQ5kSCRRM0hBuNMdH yBqtVgmx75vYTjRdprTvGeByhUk3q5CTWXJIgmm50prEpQ2XZrZE8Ttok3KcGqfl8kjX +wlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933505; x=1755538305; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=M5aWSC3VweCjbJoCLklfizXMRwOKGjiP4PRbbUtyan4=; b=vZF33o7+swEi6229IBdOVyedaGOtsAYFZazr+ksMguBLRyhiDDrnBJwlSukg3QKxnk K/uz7UP/7LX0KjV0CPpykk711LEnbkN0yM+CEUJ4Ogy98GvbdNwiQx2F22C8gO4E6SGJ flMJo3NrNGkV9nlMqRzPOQ5q5Hy2u4xBENvtbKeNEeutpnis4XRk65ZbZ2gH8sH4NVwd aMWZ2rQPHnIfpUWk1DHYMR1fsvTVZW5bE6sUdBq8MKuYavKGlm3x8IkC+raD6zsTwwr0 Bpww/y9k7MXtjON6pmVdbzkhfOKvtTlUkMT4TAW6SGsFRvlPgB5MBe4us3rhXkMe6v6X 8Xrg== X-Forwarded-Encrypted: i=1; AJvYcCUQaU9uR63W4RzKgZQ8wzQRT5ggoxF2NvMh0NaX5hKHuFSWyTzYYa85iv9MURpUtShj7hifLw==@lists.linux.dev X-Gm-Message-State: AOJu0YyRZK3lHBY7S6DxO4/zkbi41lyM+kfew1c4HsBTFwiu6Edij5Yt nhQ5qRvpXVJOngFDGLdm9WWvlutWh6TbtohRdjXWlz5DiggvGrBderN120p3rnXY81gq1s35u1C TU78Ykw== X-Google-Smtp-Source: AGHT+IEtI0hZmQkLl6do9xR5bq6fk+hkwUvmFCZYReLtL0+PGPBf8SbdQd0pvNwlObuC5a18Dro3jK8mXEE= X-Received: from plbmi15.prod.google.com ([2002:a17:902:fccf:b0:23f:cd4f:c45d]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ecc2:b0:234:f4da:7eeb with SMTP id d9443c01a7336-242c1ffb1f7mr164182355ad.7.1754933504815; Mon, 11 Aug 2025 10:31:44 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:37 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-10-kuniyu@google.com> Subject: [PATCH v2 net-next 09/12] net-memcg: Pass struct sock to mem_cgroup_sk_under_memory_pressure(). From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" We will store a flag in the lowest bit of sk->sk_memcg. Then, we cannot pass the raw pointer to mem_cgroup_under_socket_pressure(). Let's pass struct sock to it and rename the function to match other functions starting with mem_cgroup_sk_. Note that the helper is moved to sock.h to use mem_cgroup_from_sk(). Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Tested-by: syzbot@syzkaller.appspotmail.com --- include/linux/memcontrol.h | 18 ------------------ include/net/proto_memory.h | 2 +- include/net/sock.h | 22 ++++++++++++++++++++++ include/net/tcp.h | 2 +- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 0837d3de3a68..fb27e3d2fdac 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1642,19 +1642,6 @@ static inline u64 mem_cgroup_get_socket_pressure(str= uct mem_cgroup *memcg) } #endif =20 -static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *mem= cg) -{ -#ifdef CONFIG_MEMCG_V1 - if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) - return !!memcg->tcpmem_pressure; -#endif /* CONFIG_MEMCG_V1 */ - do { - if (time_before64(get_jiffies_64(), mem_cgroup_get_socket_pressure(memcg= ))) - return true; - } while ((memcg =3D parent_mem_cgroup(memcg))); - return false; -} - int alloc_shrinker_info(struct mem_cgroup *memcg); void free_shrinker_info(struct mem_cgroup *memcg); void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id); @@ -1686,11 +1673,6 @@ static inline void mem_cgroup_sk_uncharge(const stru= ct sock *sk, { } =20 -static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *mem= cg) -{ - return false; -} - static inline void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id) { diff --git a/include/net/proto_memory.h b/include/net/proto_memory.h index 859e63de81c4..8e91a8fa31b5 100644 --- a/include/net/proto_memory.h +++ b/include/net/proto_memory.h @@ -32,7 +32,7 @@ static inline bool sk_under_memory_pressure(const struct = sock *sk) return false; =20 if (mem_cgroup_sk_enabled(sk) && - mem_cgroup_under_socket_pressure(sk->sk_memcg)) + mem_cgroup_sk_under_memory_pressure(sk)) return true; =20 return !!READ_ONCE(*sk->sk_prot->memory_pressure); diff --git a/include/net/sock.h b/include/net/sock.h index 3efdf680401d..3bc4d566f7d0 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -2604,6 +2604,23 @@ static inline bool mem_cgroup_sk_enabled(const struc= t sock *sk) { return mem_cgroup_sockets_enabled && mem_cgroup_from_sk(sk); } + +static inline bool mem_cgroup_sk_under_memory_pressure(const struct sock *= sk) +{ + struct mem_cgroup *memcg =3D mem_cgroup_from_sk(sk); + +#ifdef CONFIG_MEMCG_V1 + if (!cgroup_subsys_on_dfl(memory_cgrp_subsys)) + return !!memcg->tcpmem_pressure; +#endif /* CONFIG_MEMCG_V1 */ + + do { + if (time_before64(get_jiffies_64(), mem_cgroup_get_socket_pressure(memcg= ))) + return true; + } while ((memcg =3D parent_mem_cgroup(memcg))); + + return false; +} #else static inline struct mem_cgroup *mem_cgroup_from_sk(const struct sock *sk) { @@ -2614,6 +2631,11 @@ static inline bool mem_cgroup_sk_enabled(const struc= t sock *sk) { return false; } + +static inline bool mem_cgroup_sk_under_memory_pressure(const struct sock *= sk) +{ + return false; +} #endif =20 static inline long sock_rcvtimeo(const struct sock *sk, bool noblock) diff --git a/include/net/tcp.h b/include/net/tcp.h index 9f01b6be6444..2936b8175950 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -276,7 +276,7 @@ extern unsigned long tcp_memory_pressure; static inline bool tcp_under_memory_pressure(const struct sock *sk) { if (mem_cgroup_sk_enabled(sk) && - mem_cgroup_under_socket_pressure(sk->sk_memcg)) + mem_cgroup_sk_under_memory_pressure(sk)) return true; =20 return READ_ONCE(tcp_memory_pressure); --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1253F2DECC5 for ; Mon, 11 Aug 2025 17:31:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933508; cv=none; b=i0v1ahrLISy+x+st7bDIp/yAzMVwOFXm3irxKj8HS+srJRMusu0/+LKHu4p7syDOaBt7Ov1xoHCOZ4lFqJLTLBGeTEfPv0e4chmLQvx5Fljr6gBywcN7VNlDZNbi852cjFnjJJzrLTj2cR+YF+Q8h2tZMMZleLI98SPOuHCqwc0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933508; c=relaxed/simple; bh=YWgmeeUhSBtdIU2IYL8FWGMjBkXvcKxfNS9et8o2ZvA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=U2jj9wCuv0a3/M77v7P9wX6m/7SCXAn0tIn/yjjH6Kj5ZgUD6d6IPzb/TKrgIku6YfQyiAIIEgE0M2VF9sDhqsYliiMtOcZvV7QSd51DIMAcsqgjTTzf0lghZPGyGK6TTn/8kr4fW490W/WMNVaufPKC98BdKUgCtTUEiEAriQM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=GIHhtaJ7; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="GIHhtaJ7" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-23fe28867b7so61593635ad.2 for ; Mon, 11 Aug 2025 10:31:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933506; x=1755538306; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=UmnhomKCr3e2ahj1QMW8pKbPe/+04IGBoELpRw2IfXA=; b=GIHhtaJ7XjcMo1FhUAjVLs4DgWvWVluFVmNlh/7iOJhfWzqVvIlLWUgvxVY51+gRCq 8pByGlKTz6xM8ZUkICOZlB/KcXVLGRflcNiuaYIKZEz+N/SkLw6Dil9eRDR0UyQr+wGh IM50UOq9r3+d5u1mWhL4fu1eFm1f73UJxdpi6VZE9VdtMFPdvooCwnsVdLEQGY8ZyHs0 tfw4ri12gmt00kcgs5dwPt5P/L3l8EjP+3gU8lS6dRCxuC/cQ5Lf3HfPCv3vwrCx3S2N z5tOpR7FLTLjD8LnlrcgW1aIs8iKbSgAZcH66HoGWhhE47rKsMHwpujOSIsMk6swL+sR /7XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933506; x=1755538306; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=UmnhomKCr3e2ahj1QMW8pKbPe/+04IGBoELpRw2IfXA=; b=wQuj1WMnTS4tiM9xPGyAsayAp1cF5XT8hjNZsIbfWl1NyA7AvehAowXERBdUd5jcG2 64z//4iNIjMI/1rvDrKNWPWSXKENsaMLY8iA9GK0YDMgigyay90w0KGa1Agn08wQaVwc vOSV4IhbTEbfT9I9JEjIQ0P7yiXuDpypL66JDX+mx0ncw7q4+TpjBo73M2jzUEQF2SX+ hDuAXAulLUHvC0kD6o2mr2KK3RCFootYm0km48mHhRrYFEj34hzzS8gG96DwWTPSXG6U 3HcN+gMPjF/xxH4RI4fLIF8G2tR6vt5mNYJ0rtTgatqWB4IOKsHPK1MLwl+EMcfFnVRt eTPg== X-Forwarded-Encrypted: i=1; AJvYcCWxb1lO4E75tKt/A0B4Qn3M0tIYdFP9R4jupjYGuzU8Y4Ahq/eaiJG1Htk9gN2ZYFY11KGtvw==@lists.linux.dev X-Gm-Message-State: AOJu0Yyb+545WDJoee0AQ1Jfysky3V8ta+1OI8jaAQGUw5H2LJ8vfLFI +tLEYCWaeM2yFH7bHeRLkajg+U/1IWbShfOHyzL7UvjfVA8NFbQNb1CaoUKN6kkT8wAr7/QkkDA wGRSfRA== X-Google-Smtp-Source: AGHT+IEbQbPObtr4lDb3C6IUSrTWzurWfQ/uCHMXicVSCI8UFHPyb3Vp4pwMwBuWD+yHcnEb6yN4kCs20/w= X-Received: from pjsa15.prod.google.com ([2002:a17:90a:be0f:b0:31f:26b:cc66]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:2ace:b0:234:b123:b4ff with SMTP id d9443c01a7336-242c2011167mr203387105ad.21.1754933506388; Mon, 11 Aug 2025 10:31:46 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:38 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-11-kuniyu@google.com> Subject: [PATCH v2 net-next 10/12] net: Define sk_memcg under CONFIG_MEMCG. From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Except for sk_clone_lock(), all accesses to sk->sk_memcg is done under CONFIG_MEMCG. As a bonus, let's define sk->sk_memcg under CONFIG_MEMCG. Signed-off-by: Kuniyuki Iwashima Reviewed-by: Eric Dumazet Tested-by: syzbot@syzkaller.appspotmail.com --- include/net/sock.h | 2 ++ net/core/sock.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/include/net/sock.h b/include/net/sock.h index 3bc4d566f7d0..1c49ea13af4a 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -443,7 +443,9 @@ struct sock { __cacheline_group_begin(sock_read_rxtx); int sk_err; struct socket *sk_socket; +#ifdef CONFIG_MEMCG struct mem_cgroup *sk_memcg; +#endif #ifdef CONFIG_XFRM struct xfrm_policy __rcu *sk_policy[2]; #endif diff --git a/net/core/sock.c b/net/core/sock.c index 5537ca263858..ab6953d295df 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -2512,8 +2512,10 @@ struct sock *sk_clone_lock(const struct sock *sk, co= nst gfp_t priority) =20 sock_reset_flag(newsk, SOCK_DONE); =20 +#ifdef CONFIG_MEMCG /* sk->sk_memcg will be populated at accept() time */ newsk->sk_memcg =3D NULL; +#endif =20 cgroup_sk_clone(&newsk->sk_cgrp_data); =20 @@ -4452,7 +4454,9 @@ static int __init sock_struct_check(void) =20 CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rxtx, sk_err); CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rxtx, sk_socket); +#ifdef CONFIG_MEMCG CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_read_rxtx, sk_memcg); +#endif =20 CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rxtx, sk_lock); CACHELINE_ASSERT_GROUP_MEMBER(struct sock, sock_write_rxtx, sk_reserved_m= em); --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pg1-f202.google.com (mail-pg1-f202.google.com [209.85.215.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD0252E03EF for ; Mon, 11 Aug 2025 17:31:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933510; cv=none; b=qDA8wHn6fXZ6Ys6o/mo81QE+ZlV8E4DkV17ZqQblBV9YV5Fvm/odguXSk1HB7BzIhNenExsT18YjTbpSaU50oDlJkoAn0GR3QmuqFW+9aOxdDA/SqR+tMarJMOhwD7avMTOl/AKDA0RvOY+IQNgEZ/02xiBaqkR4zJQnc/LYdvk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933510; c=relaxed/simple; bh=xkRERDS1LDhtc4ABopT6NOBLc6UTOqA/kGMvd9jxHhM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gfnh6VLB4cVR9JVMhr6WVfNMrKgqnDwVfGjwqmpWHF7Vdamg//5s65bMW1dYxVRyRFQ8oPVhqy8gCVacz1MmwypcTSggsQ/SK96k7TZZKzpUzO8l+jQzaMKBJQbmQg+bX+xNgkqEVaPsP+Od/oC6HkajOQ2MkrX5YMp6xo11prw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=LcvOqR+/; arc=none smtp.client-ip=209.85.215.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="LcvOqR+/" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b44fdfe7b8dso1245880a12.2 for ; Mon, 11 Aug 2025 10:31:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933508; x=1755538308; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=wvflH4mEPAWQ6li4TrYWNHfiAFRxuWfsFRk3VY+0HGw=; b=LcvOqR+/Ba+ypMal4eN+UxMlA6kb1oedasUSQPo//Pm755tofcypYjFhbBKfgBEeBz SnAmuH6RvKxT87VCabOHS/QZnb7ZLejzlMNuZ4nP9S1mo07PF82KoU+XxJaXMGsIV5FA BPyeck0gz5zpmtUOn3YztyYdtAEtBsW4Fkdwe6+7W7v4/T0voT+1Si9k8TSvhuCILY+T kzJrE506B6RuHKaqCguIf0quLTRgVgoneMI8kyqFyhK3bKQHAD16N3gSfIptMV6SjPBP ZG+p2cuyJMl8z1alefkwpw1mrVp7/BKEhuhgrBtJDzk6YsGncLQj7Z5XdsGM86QXPJYi RxeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933508; x=1755538308; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=wvflH4mEPAWQ6li4TrYWNHfiAFRxuWfsFRk3VY+0HGw=; b=Pi4G9CRs9HoKQo8vpIkXRTTtkZr5Czoa4EQWs2p45ijWfQGRPlqJTLip/i6kv9Nr+E 2f1/P/yGxSDk1pEInY9d2OQNbYw0+nYL0f773ar3EOqz6DrKmchtN8crW2OgfYLdOqCh uWH8R4h5GR69UDfuLvC0tXY3gDxHmpzpgQpq+BPzw55O5Ma75DpKZbMdtkVJ5uVQW2z4 H7yI0xt65AKXl6SeppS+AZSafNJCpfz09je5mZE6wNiqPJWulsHCpWIQCA90LAbE3uUH n3J3l58A+x1QQUVBdoK1SqWhlHDoUnlpQQJruG6DEhp/n64F+5+buMc7zdaGRwgL3qqP kxNA== X-Forwarded-Encrypted: i=1; AJvYcCWcwmGcNbBlpr5fP/0A2W0WjTJbh5WuhFr7BX0CbPkEFjw56BAzo/89j822U6SDnPJVj4xl3g==@lists.linux.dev X-Gm-Message-State: AOJu0YywaMsmiz8gr053nWj0tJgNjNqE3WeSkhSE0DXWqGypbaFzjfyE RiGu1Lc/VbIkyRtUpn3q06FSk+wWXP9SEd1/qoZZolj/uAlusN7a5cufcTxhhKhuyIlDIZ5NlXf PCJub5A== X-Google-Smtp-Source: AGHT+IHWru/esDMIorV9KwapH35BgNKYXxj+gZBO2aUFirZsNJPkvzOa2N5vDdIDqP57DTCGbEd9T+ROCI0= X-Received: from pjbgf4.prod.google.com ([2002:a17:90a:c7c4:b0:312:ea08:fa64]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:3d85:b0:206:a9bd:a3a3 with SMTP id adf61e73a8af0-2409a968d13mr468882637.24.1754933507942; Mon, 11 Aug 2025 10:31:47 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:39 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-12-kuniyu@google.com> Subject: [PATCH v2 net-next 11/12] net-memcg: Store MEMCG_SOCK_ISOLATED in sk->sk_memcg. From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" We will decouple sockets from the global protocol memory accounting if the cgroup's memory.max is not "max" (PAGE_COUNTER_MAX). memory.max can change at any time, so we must snapshot the state for each socket to ensure consistency. Given sk->sk_memcg can be accessed in the fast path, it would be preferable to place the flag field in the same cache line as sk->sk_memcg. However, struct sock does not have such a 1-byte hole. Let's store the flag in the lowest bit of sk->sk_memcg and add a helper to check the bit. In the next patch, if mem_cgroup_sk_isolated() returns true, the socket will not be charged to sk->sk_prot->memory_allocated. Signed-off-by: Kuniyuki Iwashima Tested-by: syzbot@syzkaller.appspotmail.com --- v2: * Set MEMCG_SOCK_ISOLATED based on memory.max instead of a dedicated knob --- include/net/sock.h | 23 ++++++++++++++++++++++- mm/memcontrol.c | 14 ++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/include/net/sock.h b/include/net/sock.h index 1c49ea13af4a..29ba5fdaafd6 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -2597,9 +2597,18 @@ static inline gfp_t gfp_memcg_charge(void) } =20 #ifdef CONFIG_MEMCG + +#define MEMCG_SOCK_ISOLATED 1UL +#define MEMCG_SOCK_FLAG_MASK MEMCG_SOCK_ISOLATED +#define MEMCG_SOCK_PTR_MASK ~(MEMCG_SOCK_FLAG_MASK) + static inline struct mem_cgroup *mem_cgroup_from_sk(const struct sock *sk) { - return sk->sk_memcg; + unsigned long val =3D (unsigned long)sk->sk_memcg; + + val &=3D MEMCG_SOCK_PTR_MASK; + + return (struct mem_cgroup *)val; } =20 static inline bool mem_cgroup_sk_enabled(const struct sock *sk) @@ -2607,6 +2616,13 @@ static inline bool mem_cgroup_sk_enabled(const struc= t sock *sk) return mem_cgroup_sockets_enabled && mem_cgroup_from_sk(sk); } =20 +static inline bool mem_cgroup_sk_isolated(const struct sock *sk) +{ + struct mem_cgroup *memcg =3D sk->sk_memcg; + + return (unsigned long)memcg & MEMCG_SOCK_ISOLATED; +} + static inline bool mem_cgroup_sk_under_memory_pressure(const struct sock *= sk) { struct mem_cgroup *memcg =3D mem_cgroup_from_sk(sk); @@ -2634,6 +2650,11 @@ static inline bool mem_cgroup_sk_enabled(const struc= t sock *sk) return false; } =20 +static inline bool mem_cgroup_sk_isolated(const struct sock *sk) +{ + return false; +} + static inline bool mem_cgroup_sk_under_memory_pressure(const struct sock *= sk) { return false; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index d32b7a547f42..cb5b8a9d21db 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -4995,6 +4995,16 @@ void mem_cgroup_migrate(struct folio *old, struct fo= lio *new) DEFINE_STATIC_KEY_FALSE(memcg_sockets_enabled_key); EXPORT_SYMBOL(memcg_sockets_enabled_key); =20 +static void mem_cgroup_sk_set(struct sock *sk, const struct mem_cgroup *me= mcg) +{ + unsigned long val =3D (unsigned long)memcg; + + if (READ_ONCE(memcg->memory.max) !=3D PAGE_COUNTER_MAX) + val |=3D MEMCG_SOCK_ISOLATED; + + sk->sk_memcg =3D (struct mem_cgroup *)val; +} + void mem_cgroup_sk_alloc(struct sock *sk) { struct mem_cgroup *memcg; @@ -5013,7 +5023,7 @@ void mem_cgroup_sk_alloc(struct sock *sk) if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) && !memcg1_tcpmem_active(me= mcg)) goto out; if (css_tryget(&memcg->css)) - sk->sk_memcg =3D memcg; + mem_cgroup_sk_set(sk, memcg); out: rcu_read_unlock(); } @@ -5035,7 +5045,7 @@ void mem_cgroup_sk_inherit(const struct sock *sk, str= uct sock *newsk) =20 mem_cgroup_sk_free(newsk); css_get(&memcg->css); - newsk->sk_memcg =3D memcg; + mem_cgroup_sk_set(newsk, memcg); } =20 /** --=20 2.51.0.rc0.155.g4a0f42376b-goog From nobody Wed Sep 17 18:19:41 2025 Received: from mail-pf1-f201.google.com (mail-pf1-f201.google.com [209.85.210.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B95E2E06D2 for ; Mon, 11 Aug 2025 17:31:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933513; cv=none; b=gT+RpLEEDIAzzHCwbQlSibLRE3rIzXRd5MxrjzzOQPFJ4K59igl3A1aBOWWXeKk8uU0nCs/1TdKJzwL3WlrVPFf7lMqXLZXbuJBiZagv11KLWfNn0okyH0Latqde/b/54DOx0YZFVDZPkYjoqUT0FqpBTt0TXYpv8VyA3YW70RQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754933513; c=relaxed/simple; bh=dOLfm9I4B2TFecBHydDXiOPMuM6Ln7/l9lzWDNQH6Dc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=KpfzUjvZrQVVycm7ilDAcKAxvtMCAzUue1pbXEnbKHiD2cUHvJzIHagRYZbLDEubFNNGBPYBq8uzExnp3wny+2jJmNnlevk+IxjucS1SjkRkOYO+0/8b4o5+RHrsJffxixmQczoi4binqY5asSU6Q+oqifOn3AWL14vxkeEHtYU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=uZhY7aEV; arc=none smtp.client-ip=209.85.210.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--kuniyu.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="uZhY7aEV" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-76bcd829ff1so4350589b3a.1 for ; Mon, 11 Aug 2025 10:31:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1754933509; x=1755538309; darn=lists.linux.dev; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=k7SLf/b1TNrP6kPGA7P5mGSIp2EjjMSQCEcOICNla1I=; b=uZhY7aEV/AUt0F8dEscWRYodOX/+qCyhYBCswvvissi2+P4z7Rwglit1mcS6VY+E/U bqVrvs50DeZmtI8AjP7Bf1AOOycGR8gZhlEmgqIKxrYUQ+Yvn2kpvtTR/VaoEDEjT2Rp dxv0eAD3KJJ/y6HcLYzXhAM2NO61uFWxxWdBY8b062pxa/znSgL7iOEVpGG+DdpccnOi uTZNdIBXpAhHFXcLJR0fOmCQmQa18AtLznJECQer3PZPb57ClcaHnUsCKV6FzU3YsfaR IOhqyrGvZRemTbnIyddOz7Quh7oTX+pF/cD4OoOLtBwBjF14cN8JrwVzYQj65m6zQjn5 edqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754933509; x=1755538309; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=k7SLf/b1TNrP6kPGA7P5mGSIp2EjjMSQCEcOICNla1I=; b=F1h4fHVDTTotKeYTzczrfm1+tAGK6D4+7yurUKemRWPkn4eUu6W8l8MBq4RsNSpEtv kygYIx4vvysRb1EbgchvPPfMen/2xo06T8DL7RwPGJRFdQMdilLRntgI5KdCOaq4qY1K PllnM26HF0pbQNUIqFzUS/OKdb9+ZX83IU+/F7xbcOCApCejYr2+M2JYe4/P/yxQ2N3x eRYUT0WZ35A1htGCqO+D89QTPz8VUL3mA8HpZKYO/IBGFEgo4fXLnJoUFOAVVHFSSJkM dKktqUI6BajAhiv4789A5Vv/loNB2WISQ2dICRrK3DE3h0COn57QqMPpM2BL4/kc8C1M v9Tw== X-Forwarded-Encrypted: i=1; AJvYcCWcdcGjMsy2g15EJs5V4JXoDzSzLEJ7PG/K7bPAvodLS0nmUqoGgiVEHmBAhjCGSY9NBPkHrg==@lists.linux.dev X-Gm-Message-State: AOJu0YzP11j+PdsBhv7/phQuU1I2btBT0/J9a4KYZ7dYuplVvj1emC4m 2+JVi9p3NTsSlXMf0kpb/cuVLQu9D+0LTnE5sck0J8u4xII6EGijOV88v/iblu0lAwn78N7QRoN ydFdu2w== X-Google-Smtp-Source: AGHT+IEkxOxyR4soNgLW4++VFX6C582L+cnGEVtxtVwkEQ3Ypcq86ke6b4X42kPLmM6zLuE6ldq4TTZy3Ic= X-Received: from pgbee13.prod.google.com ([2002:a05:6a02:458d:b0:b42:c17:47ac]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:892f:b0:240:9af2:71cb with SMTP id adf61e73a8af0-2409af27360mr180384637.20.1754933509378; Mon, 11 Aug 2025 10:31:49 -0700 (PDT) Date: Mon, 11 Aug 2025 17:30:40 +0000 In-Reply-To: <20250811173116.2829786-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250811173116.2829786-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc0.155.g4a0f42376b-goog Message-ID: <20250811173116.2829786-13-kuniyu@google.com> Subject: [PATCH v2 net-next 12/12] net-memcg: Decouple controlled memcg from global protocol memory accounting. From: Kuniyuki Iwashima To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Neal Cardwell , Paolo Abeni , Willem de Bruijn , Matthieu Baerts , Mat Martineau , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Andrew Morton , "=?UTF-8?q?Michal=20Koutn=C3=BD?=" , Tejun Heo Cc: Simon Horman , Geliang Tang , Muchun Song , Mina Almasry , Kuniyuki Iwashima , Kuniyuki Iwashima , netdev@vger.kernel.org, mptcp@lists.linux.dev, cgroups@vger.kernel.org, linux-mm@kvack.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Some protocols (e.g., TCP, UDP) implement memory accounting for socket buffers and charge memory to per-protocol global counters pointed to by sk->sk_proto->memory_allocated. When running under a non-root cgroup, this memory is also charged to the memcg as "sock" in memory.stat. Even when a memcg controls memory usage, sockets of such protocols are still subject to global limits (e.g., /proc/sys/net/ipv4/tcp_mem). This makes it difficult to accurately estimate and configure appropriate global limits, especially in multi-tenant environments. If all workloads were guaranteed to be controlled under memcg, the issue could be worked around by setting tcp_mem[0~2] to UINT_MAX. In reality, this assumption does not always hold, and processes that belong to the root cgroup or opt out of memcg can consume memory up to the global limit, becoming a noisy neighbour. Let's decouple memcg from the global per-protocol memory accounting if it has a finite memory.max (!=3D "max"). We still keep charging memory to memcg and protocol duplicately if memcg has "max" in memory.max because TCP allows only 10% of physical memory by default. This simplifies memcg configuration while keeping the global limits within a reasonable range. If mem_cgroup_sk_isolated(sk) returns true, the per-protocol memory accounting is skipped. In inet_csk_accept(), we need to reclaim counts that are already charged for child sockets because we do not allocate sk->sk_memcg until accept(). Note that trace_sock_exceed_buf_limit() will always show 0 as accounted for the isolated sockets, but this can be obtained via memory.stat. Tested with a script that creates local socket pairs and send()s a bunch of data without recv()ing. Setup: # mkdir /sys/fs/cgroup/test # echo $$ >> /sys/fs/cgroup/test/cgroup.procs # sysctl -q net.ipv4.tcp_mem=3D"1000 1000 1000" Without setting memory.max: # prlimit -n=3D524288:524288 bash -c "python3 pressure.py" & # cat /sys/fs/cgroup/test/memory.stat | grep sock sock 22642688 # ss -tn | head -n 5 State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 2000 0 127.0.0.1:34479 127.0.0.1:53188 ESTAB 2000 0 127.0.0.1:34479 127.0.0.1:49972 ESTAB 2000 0 127.0.0.1:34479 127.0.0.1:53868 ESTAB 2000 0 127.0.0.1:34479 127.0.0.1:53554 # nstat | grep Pressure || echo no pressure TcpExtTCPMemoryPressures 1 0.0 With memory.max: # echo $((64 * 1024 ** 3)) > /sys/fs/cgroup/test/memory.max # prlimit -n=3D524288:524288 bash -c "python3 pressure.py" & # cat /sys/fs/cgroup/test/memory.stat | grep sock sock 2757468160 # ss -tn | head -n 5 State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 111000 0 127.0.0.1:36019 127.0.0.1:49026 ESTAB 110000 0 127.0.0.1:36019 127.0.0.1:45630 ESTAB 110000 0 127.0.0.1:36019 127.0.0.1:44870 ESTAB 111000 0 127.0.0.1:36019 127.0.0.1:45274 # nstat | grep Pressure || echo no pressure no pressure Signed-off-by: Kuniyuki Iwashima Tested-by: syzbot@syzkaller.appspotmail.com --- v2: * Add sk_should_enter_memory_pressure() for tcp_enter_memory_pressure() calls not in core * Update example in changelog --- include/net/proto_memory.h | 15 ++++++-- include/net/tcp.h | 10 ++++-- net/core/sock.c | 64 ++++++++++++++++++++++----------- net/ipv4/inet_connection_sock.c | 18 ++++++++-- net/ipv4/tcp.c | 3 +- net/ipv4/tcp_output.c | 10 ++++-- net/mptcp/protocol.c | 4 ++- net/tls/tls_device.c | 3 +- 8 files changed, 93 insertions(+), 34 deletions(-) diff --git a/include/net/proto_memory.h b/include/net/proto_memory.h index 8e91a8fa31b5..8e8432b13515 100644 --- a/include/net/proto_memory.h +++ b/include/net/proto_memory.h @@ -31,13 +31,22 @@ static inline bool sk_under_memory_pressure(const struc= t sock *sk) if (!sk->sk_prot->memory_pressure) return false; =20 - if (mem_cgroup_sk_enabled(sk) && - mem_cgroup_sk_under_memory_pressure(sk)) - return true; + if (mem_cgroup_sk_enabled(sk)) { + if (mem_cgroup_sk_under_memory_pressure(sk)) + return true; + + if (mem_cgroup_sk_isolated(sk)) + return false; + } =20 return !!READ_ONCE(*sk->sk_prot->memory_pressure); } =20 +static inline bool sk_should_enter_memory_pressure(struct sock *sk) +{ + return !mem_cgroup_sk_enabled(sk) || !mem_cgroup_sk_isolated(sk); +} + static inline long proto_memory_allocated(const struct proto *prot) { diff --git a/include/net/tcp.h b/include/net/tcp.h index 2936b8175950..0191a4585bba 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h @@ -275,9 +275,13 @@ extern unsigned long tcp_memory_pressure; /* optimized version of sk_under_memory_pressure() for TCP sockets */ static inline bool tcp_under_memory_pressure(const struct sock *sk) { - if (mem_cgroup_sk_enabled(sk) && - mem_cgroup_sk_under_memory_pressure(sk)) - return true; + if (mem_cgroup_sk_enabled(sk)) { + if (mem_cgroup_sk_under_memory_pressure(sk)) + return true; + + if (mem_cgroup_sk_isolated(sk)) + return false; + } =20 return READ_ONCE(tcp_memory_pressure); } diff --git a/net/core/sock.c b/net/core/sock.c index ab6953d295df..755540215570 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -1046,17 +1046,21 @@ static int sock_reserve_memory(struct sock *sk, int= bytes) if (!charged) return -ENOMEM; =20 - /* pre-charge to forward_alloc */ - sk_memory_allocated_add(sk, pages); - allocated =3D sk_memory_allocated(sk); - /* If the system goes into memory pressure with this - * precharge, give up and return error. - */ - if (allocated > sk_prot_mem_limits(sk, 1)) { - sk_memory_allocated_sub(sk, pages); - mem_cgroup_sk_uncharge(sk, pages); - return -ENOMEM; + if (!mem_cgroup_sk_isolated(sk)) { + /* pre-charge to forward_alloc */ + sk_memory_allocated_add(sk, pages); + allocated =3D sk_memory_allocated(sk); + + /* If the system goes into memory pressure with this + * precharge, give up and return error. + */ + if (allocated > sk_prot_mem_limits(sk, 1)) { + sk_memory_allocated_sub(sk, pages); + mem_cgroup_sk_uncharge(sk, pages); + return -ENOMEM; + } } + sk_forward_alloc_add(sk, pages << PAGE_SHIFT); =20 WRITE_ONCE(sk->sk_reserved_mem, @@ -3153,8 +3157,11 @@ bool sk_page_frag_refill(struct sock *sk, struct pag= e_frag *pfrag) if (likely(skb_page_frag_refill(32U, pfrag, sk->sk_allocation))) return true; =20 - sk_enter_memory_pressure(sk); + if (sk_should_enter_memory_pressure(sk)) + sk_enter_memory_pressure(sk); + sk_stream_moderate_sndbuf(sk); + return false; } EXPORT_SYMBOL(sk_page_frag_refill); @@ -3267,18 +3274,30 @@ int __sk_mem_raise_allocated(struct sock *sk, int s= ize, int amt, int kind) { bool memcg_enabled =3D false, charged =3D false; struct proto *prot =3D sk->sk_prot; - long allocated; - - sk_memory_allocated_add(sk, amt); - allocated =3D sk_memory_allocated(sk); + long allocated =3D 0; =20 if (mem_cgroup_sk_enabled(sk)) { + bool isolated =3D mem_cgroup_sk_isolated(sk); + memcg_enabled =3D true; charged =3D mem_cgroup_sk_charge(sk, amt, gfp_memcg_charge()); - if (!charged) + + if (isolated && charged) + return 1; + + if (!charged) { + if (!isolated) { + sk_memory_allocated_add(sk, amt); + allocated =3D sk_memory_allocated(sk); + } + goto suppress_allocation; + } } =20 + sk_memory_allocated_add(sk, amt); + allocated =3D sk_memory_allocated(sk); + /* Under limit. */ if (allocated <=3D sk_prot_mem_limits(sk, 0)) { sk_leave_memory_pressure(sk); @@ -3357,7 +3376,8 @@ int __sk_mem_raise_allocated(struct sock *sk, int siz= e, int amt, int kind) =20 trace_sock_exceed_buf_limit(sk, prot, allocated, kind); =20 - sk_memory_allocated_sub(sk, amt); + if (allocated) + sk_memory_allocated_sub(sk, amt); =20 if (charged) mem_cgroup_sk_uncharge(sk, amt); @@ -3396,11 +3416,15 @@ EXPORT_SYMBOL(__sk_mem_schedule); */ void __sk_mem_reduce_allocated(struct sock *sk, int amount) { - sk_memory_allocated_sub(sk, amount); - - if (mem_cgroup_sk_enabled(sk)) + if (mem_cgroup_sk_enabled(sk)) { mem_cgroup_sk_uncharge(sk, amount); =20 + if (mem_cgroup_sk_isolated(sk)) + return; + } + + sk_memory_allocated_sub(sk, amount); + if (sk_under_global_memory_pressure(sk) && (sk_memory_allocated(sk) < sk_prot_mem_limits(sk, 0))) sk_leave_memory_pressure(sk); diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_soc= k.c index 0ef1eacd539d..9d56085f7f54 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -22,6 +22,7 @@ #include #include #include +#include =20 #if IS_ENABLED(CONFIG_IPV6) /* match_sk*_wildcard =3D=3D true: IPV6_ADDR_ANY equals to any IPv6 addre= sses @@ -710,7 +711,6 @@ struct sock *inet_csk_accept(struct sock *sk, struct pr= oto_accept_arg *arg) =20 if (mem_cgroup_sockets_enabled) { gfp_t gfp =3D GFP_KERNEL | __GFP_NOFAIL; - int amt =3D 0; =20 /* atomically get the memory usage, set and charge the * newsk->sk_memcg. @@ -719,15 +719,27 @@ struct sock *inet_csk_accept(struct sock *sk, struct = proto_accept_arg *arg) =20 mem_cgroup_sk_alloc(newsk); if (mem_cgroup_from_sk(newsk)) { + int amt; + /* The socket has not been accepted yet, no need * to look at newsk->sk_wmem_queued. */ amt =3D sk_mem_pages(newsk->sk_forward_alloc + atomic_read(&newsk->sk_rmem_alloc)); + if (amt) { + /* This amt is already charged globally to + * sk_prot->memory_allocated due to lack of + * sk_memcg until accept(), thus we need to + * reclaim it here if newsk is isolated. + */ + if (mem_cgroup_sk_isolated(newsk)) + sk_memory_allocated_sub(newsk, amt); + + mem_cgroup_sk_charge(newsk, amt, gfp); + } + } =20 - if (amt) - mem_cgroup_sk_charge(newsk, amt, gfp); kmem_cache_charge(newsk, gfp); =20 release_sock(newsk); diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 71a956fbfc55..dcbd49e2f8af 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -908,7 +908,8 @@ struct sk_buff *tcp_stream_alloc_skb(struct sock *sk, g= fp_t gfp, } __kfree_skb(skb); } else { - sk->sk_prot->enter_memory_pressure(sk); + if (sk_should_enter_memory_pressure(sk)) + tcp_enter_memory_pressure(sk); sk_stream_moderate_sndbuf(sk); } return NULL; diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index dfbac0876d96..f7aa86661219 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -3574,12 +3574,18 @@ void sk_forced_mem_schedule(struct sock *sk, int si= ze) delta =3D size - sk->sk_forward_alloc; if (delta <=3D 0) return; + amt =3D sk_mem_pages(delta); sk_forward_alloc_add(sk, amt << PAGE_SHIFT); - sk_memory_allocated_add(sk, amt); =20 - if (mem_cgroup_sk_enabled(sk)) + if (mem_cgroup_sk_enabled(sk)) { mem_cgroup_sk_charge(sk, amt, gfp_memcg_charge() | __GFP_NOFAIL); + + if (mem_cgroup_sk_isolated(sk)) + return; + } + + sk_memory_allocated_add(sk, amt); } =20 /* Send a FIN. The caller locks the socket for us. diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 9a287b75c1b3..1a4089b05a16 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #if IS_ENABLED(CONFIG_MPTCP_IPV6) #include @@ -1016,8 +1017,9 @@ static void mptcp_enter_memory_pressure(struct sock *= sk) mptcp_for_each_subflow(msk, subflow) { struct sock *ssk =3D mptcp_subflow_tcp_sock(subflow); =20 - if (first) + if (first && sk_should_enter_memory_pressure(sk)) tcp_enter_memory_pressure(ssk); + sk_stream_moderate_sndbuf(ssk); =20 first =3D false; diff --git a/net/tls/tls_device.c b/net/tls/tls_device.c index f672a62a9a52..92a4c16b904a 100644 --- a/net/tls/tls_device.c +++ b/net/tls/tls_device.c @@ -371,7 +371,8 @@ static int tls_do_allocation(struct sock *sk, if (!offload_ctx->open_record) { if (unlikely(!skb_page_frag_refill(prepend_size, pfrag, sk->sk_allocation))) { - READ_ONCE(sk->sk_prot)->enter_memory_pressure(sk); + if (sk_should_enter_memory_pressure(sk)) + READ_ONCE(sk->sk_prot)->enter_memory_pressure(sk); sk_stream_moderate_sndbuf(sk); return -ENOMEM; } --=20 2.51.0.rc0.155.g4a0f42376b-goog