From nobody Wed Sep 17 18:19:18 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 49D6A29C35F for ; Fri, 15 Aug 2025 20:17:36 +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=1755289057; cv=none; b=omJEHRHJKUziIybM6FcraIFLJcqNiMWGJIrGAvZbDqXsAtuOLGjo5ZauDOWpnGzu+Yd/wooxo0cMI6uCj5mjgCGD0WF8FuczfkaUXEhETYrG9In4JyAlMWY2kxIJVppRwXQPrF7AZTLtm3ADN6YwXt2UCC99DIRnTec0jG+MATs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289057; c=relaxed/simple; bh=twkMnoDWF2WEDu7aGDJTpR79gYT+9DDfGd76WM0w1Qs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ZSQ554lUZxddavnm88dVb9Tit4OLKXZOGWhpg4g6TW+alhIjohBwLIU5coU3hu84tcT10+EiDEH8CbaK/5ibyxbFHw3ug4+lp00JNA8aWf2Qa0YY++wO8kAulaV+5uPFXzjuM3SNN3NW58xhREPgAJRoGCZ+ovWGhTbIAlTd6Gg= 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=w6eNopz2; 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="w6eNopz2" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-32326e6c74eso2418080a91.3 for ; Fri, 15 Aug 2025 13:17:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755289055; x=1755893855; 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=QmaKJoKwHw82XyXX/d5iEOMfvSvHT9xY0QGibQUjsoM=; b=w6eNopz2cIAw22P6Kfei9mwS3g/IuOMWfJWSxlFeTTdOZ0ux7YbZCxo86Ks/C7vQ6U zm1sxrKhmZSNgcFVzqty8dUJIKGS+vRM7WIiU5TTciay0XvIyCWdVetDieXnn4/Z6Izl FCNuaAVFS3VDXrL5C3rT6j38tOcNtiak6GwT6kZrUD4j93MnAjIDE+yoYFXJSLsMtgkK LF+X9eO3331nvusWJ2GELL6mHIxyERzNYNbsyCbHjXqa6+p/Pxafg7+CW7lmkaWn0o7U hROF2DLZcLuIePGb8iS/O50fKGC3pF0/FMHbmfQQrkaeUf9gplYuLVpOSzbXe7f2fgVv oG8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755289055; x=1755893855; 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=QmaKJoKwHw82XyXX/d5iEOMfvSvHT9xY0QGibQUjsoM=; b=l8HFGUUJlCqfs0xCB6TB9da2HXXDrtM7hg4PTBSgBeq29GGEkiJTtYMbIgGJMyX6xn 1heq+F3CK+uWaQQ5dtiZ0vK+GnI607Ghh7/K2O/ShtYYRJZ62DKPEPL5U2KGLtlm/AWu YFGxUAgjX+xS29Dh3s/KobIXl5fT9SCnafMRi9fNeglshug6DJdf9xwiTemt634mxPa2 OEVbaDVyWgiQoMCNAaHq4JLq7SR/DCmg99evekol4N4DwXa+mfztem0lAVexv/uXqsys 1LbCisObQM73DLBZ/DTcZQoDG+2QxvUtXi7sv5LZXry3OGZK+DsrK+KCO9zDlNt2vKUB U3Ow== X-Forwarded-Encrypted: i=1; AJvYcCUWZuTru71/EK28YGqY5UAWF8dKrym08UXFgdVgT6Gndko2oWWItixY1XshCtPJ0U09qfJZRw==@lists.linux.dev X-Gm-Message-State: AOJu0Yx8smw1itNtQ/N6igKPsMftnT0sTkfgOjMqBF6yQJZVEDHCAulG cBIyHqmlRpN4iwZqWvZpWYiGkfGTOBh0FewGGIj9o0Qn58ee6fqcxuHZgZlv8hYab4Sjm3A60cz 7COdCRQ== X-Google-Smtp-Source: AGHT+IFGdAKK5lsJCVHw32dBU/IQeIjE5FuMNI2s+BoaP+r58/XH4MUq0ZbtlmMZS9ZWWTLlSD916PektfI= X-Received: from pjbtd11.prod.google.com ([2002:a17:90b:544b:b0:31f:2a78:943]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:55c7:b0:321:a2d4:11b6 with SMTP id 98e67ed59e1d1-3234db8e481mr643458a91.12.1755289055548; Fri, 15 Aug 2025 13:17:35 -0700 (PDT) Date: Fri, 15 Aug 2025 20:16:09 +0000 In-Reply-To: <20250815201712.1745332-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250815201712.1745332-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250815201712.1745332-2-kuniyu@google.com> Subject: [PATCH v5 net-next 01/10] 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 Acked-by: Matthieu Baerts (NGI0) Acked-by: Shakeel Butt --- include/linux/memcontrol.h | 6 ++++++ mm/memcontrol.c | 13 +++++++++++++ net/mptcp/subflow.c | 11 +++-------- 3 files changed, 22 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..46713b9ece06 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5024,6 +5024,19 @@ 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); + + if (sk->sk_memcg) + 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..c8a7e4b59db1 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) + mem_cgroup_sk_inherit(parent, child); } =20 static void mptcp_subflow_ops_override(struct sock *ssk) --=20 2.51.0.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:18 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 D10752BE7C3 for ; Fri, 15 Aug 2025 20:17:37 +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=1755289059; cv=none; b=kODHvClwQgp8FdISmBycQ5LyWpd/cKtWqnGqiAzOPNTO+3JwgrvqKNaMfIWYKPl2nJRdetOVzhgtJERX0hvakiBC+7jZ4Rc4U4eWkHFpXf5vKvNerv0DDPepi01eNyXADIBfzok86LeC5LicAYkRM6IUQU3R7yrIwW6RaUIEw5A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289059; c=relaxed/simple; bh=XyVZJFZzKfSSIkf/pvmLmwKjraQN8W4KgjzemH/XGU0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=mAP7clID2TTFIvR+6gnJt1qO+Mg2Nba3ZPBcuEjrUBlX8Fny1mEh3d7zhuZ04cW+X/fmj6X/+//xeco3dzDYCC4utdjxHVshX8CA5xIP0mK1VixOBxxgy8ChYy+nwGUUymu80xrja1xXFJR+JcQno7LeboB9HmSxmvtXveerem8= 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=Pyrfnc/D; 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="Pyrfnc/D" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-76e2ebafe0aso2011597b3a.3 for ; Fri, 15 Aug 2025 13:17:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755289057; x=1755893857; 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=RJ4QavREfrxYYp51rWZ/EL+zSiE81x3iM7eRADON/+o=; b=Pyrfnc/D0QnV9MJsug58VwYNAHfcDTs0pougPFGz62vNWWFdoSkkkCdkNOjS3/MMol tEc4m3KE45zC0H5+PvDZB6emHiBs0RQWNXOheKWARC1osBkro5DWdnfqm8aite+j9qMY X3XgBDI4EsTJveLwEvv78rX8h2QsfD7bu/SHAQT69xXD5wVIHnXTymGAhBd8Z1IezMuO FKt2fY4CJagfKOS06/0IcMh7eUvfHmVUw9fpFJ4z0NNOrdU9qGX5iDLigQzkBAaEn/+j c3w9pjxo0CJHBFueahuYG+Mtyqh4/zI8ooJR5Q5tUqIJyoIIPDBBxWoHFcG57H87f9Iw /KUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755289057; x=1755893857; 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=RJ4QavREfrxYYp51rWZ/EL+zSiE81x3iM7eRADON/+o=; b=xALTeD2vmE7Da0UjVzjtYB2lTwbWkqFLfJdesbpYm9g0/2us5q8MPQrazPVj2rbZtl je+YvaBxZL9rc5r0268OXQ/MwYHAes26LdIMNa7gpQZXjiErXlB8KDV9V2BzyFsldBYM 5fxS5/5DxQ6zZtGpNZL6GzZiklfGdwlwc7miLvET0ss7J2nrcZtk0BrdHG2bh1pDN9Zg wCscZRvqkzFtxZbmLjD2Zx7kiCd+sCrC85njVkKPJIk1gr5cHgnXutC5jfUL+7Go2RIs W5/+q6n1brboDT9mOAjVD3XCCETeYk7t4qyHpex5/5qkc34dJKJloB3F0fRgdLf3c05L AD2Q== X-Forwarded-Encrypted: i=1; AJvYcCWq/2i9w37xf4V3tK7Zb2fBxXxl9kFryT73hkExqv9YVq80e1q/BlrXWtcQ00nd4dbK1Z7F3A==@lists.linux.dev X-Gm-Message-State: AOJu0YzjyQgFT+AD8YE/V2vQ1sA8uaT/s5B63FvS/dKLqLvta0OEGUjD XS2H78RH1ReA2/89z9z1maDyzl1qUxGjFTEdxYeI5MAi4F5jIrQwz5Z+Wi1xV0lHJBglKHx1hPB AZ9qVww== X-Google-Smtp-Source: AGHT+IEr+/ZjFkXy8umwdjDxM5J/aKMeoAE5dmVL5UloiD+KmJwNlOPL6BEq/ZXuKgz5B8/N8YhDKs6emow= X-Received: from pfnv9.prod.google.com ([2002:aa7:8509:0:b0:76b:8c3c:6179]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1893:b0:76b:e805:30e4 with SMTP id d2e1a72fcca58-76e44838e26mr5098018b3a.24.1755289056973; Fri, 15 Aug 2025 13:17:36 -0700 (PDT) Date: Fri, 15 Aug 2025 20:16:10 +0000 In-Reply-To: <20250815201712.1745332-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250815201712.1745332-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250815201712.1745332-3-kuniyu@google.com> Subject: [PATCH v5 net-next 02/10] 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 Reviewed-by: Matthieu Baerts (NGI0) Reviewed-by: Shakeel Butt --- 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.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:18 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 47B7E2BF3FB for ; Fri, 15 Aug 2025 20:17:39 +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=1755289060; cv=none; b=DwjXz2Cop3ksUCPVfPeqMXL/HeEEHFLgIV0mv/FO9TaFkGVRyh+3DNq/UYpD3Ee/aRoEDJ8N9Ih0Vk2MFGOKsWM+4RntRQMaKPQ3J5ouUVk7iktpw7iDZNLK3f7NS/JKDeyhiJabaDwiFbc+tJ3ueVSSaKwLsivn9smfGVFR+1c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289060; c=relaxed/simple; bh=kNCka+5/ble2uhxoCvBkpMNTXujkGV/J5QaB+v82p+c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=GeVXYtyeelC6IGmhX+upN2INyoT6HNN6QHDIRVf9J/Kej2fngThU5iMX7AuTfpm9Sfo0IOVLP/PyvGrIAAXSq8rb8ZgTgz1abHxr98ExNgOZBjrxGX18Oux67wUtL76m6+3tKRn1eoBFciisjP4ztWwfz320FGXsdpfZrgcEhpE= 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=kKZ2yJ2+; 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="kKZ2yJ2+" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-76e2e8b4ab7so1883570b3a.1 for ; Fri, 15 Aug 2025 13:17:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755289058; x=1755893858; 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=1wKL4ZYGX/K8WXuwlgtNOGDh1yxD4Vkofr7n0sxP5Do=; b=kKZ2yJ2+5cpYOF8f7kKJ5E9YA6A4ZihyWCgwMIUqNE8NM+F3LWJO9yP1JbcEqqXDYm lOUGio8ICKQ319rlfObeOYjnSJs3VEdwiMdTWtse32udoQfNpNHSC3g9UC9Td3MJ0kxD zG+CojfNHCuSrWm5earxh9x0guwfsxHHv2W3v2BX6N6O4cviTNoVTpWOARZDX+X7mabG U9FBgI4rDZVkDguo1TOa5jlqUr56LxRTbSWMwjUIXT366sShUZ2Qj24K1+ZVNKFhDhD1 38Y/WHdvLe3at/uXoHrTyS0BoVAZIj2a+8/lTyKQGywtumlAQ30/Fy9ueh6WWVJCEKty WroQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755289059; x=1755893859; 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=1wKL4ZYGX/K8WXuwlgtNOGDh1yxD4Vkofr7n0sxP5Do=; b=B/nN37i5H67XNIjkWToKrQb426YndpmybYQENOlb1oBiBaHk1DqClwTlxSU6rtN9CW rjqMfsetpLWtn82IbihrpA3WR4lEtE/d+BXlj7lnLvNlefYanF44xP/zB4MebTGOVa++ h4qhFoFH90FMKXOtrOgMw+i2SpWFbopQ4sKMzLC3MUyh1yCmxWkYdSTIZ/2MEG0OZ9Cn b26iYuatBtiPaWMwkhVUjWgZQLsoGrqtp0JajfwFmey/e14UKbcfCcrJIlqu+/ZO7jfF HJGORKl8AstqG30RLZ2IBcllTMiYdptUuymSOlPLW12ToCKTGefEKZHy4iQlvViszvhf RdHA== X-Forwarded-Encrypted: i=1; AJvYcCX4PhGLRuxALntwpXeX+tSpam0hMzYIxL2fxrAmsg3aqgKBDXtHIUw90vUDxLG92QQvYQhn/A==@lists.linux.dev X-Gm-Message-State: AOJu0Yxethr2UnJyl1iVQzvtsaMaVUK+1eLPmjkNqdHE6idZz7bymuGa VYlXdqze46RpO8pBr/dcYx4A1YJ1NdsAjiMcpLsGq1aXAAtsEZ+vGmBvD56Oigz20LtGBB/hna9 JJohaow== X-Google-Smtp-Source: AGHT+IGfFQhxVrC0MRMQ+CGQK5l5v2DySu8ZxAiDgHkcBvf9T0+txoiH03BQJJ5/iyzxBM/IkoVynChoTcY= X-Received: from pgbdk2.prod.google.com ([2002:a05:6a02:c82:b0:b43:6adc:24d0]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a21:32a1:b0:240:1327:ab3e with SMTP id adf61e73a8af0-240e611783amr454188637.9.1755289058544; Fri, 15 Aug 2025 13:17:38 -0700 (PDT) Date: Fri, 15 Aug 2025 20:16:11 +0000 In-Reply-To: <20250815201712.1745332-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250815201712.1745332-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250815201712.1745332-4-kuniyu@google.com> Subject: [PATCH v5 net-next 03/10] 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 Reviewed-by: Shakeel Butt --- 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.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:18 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 D0FFE2C0F7F for ; Fri, 15 Aug 2025 20:17:40 +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=1755289062; cv=none; b=UfsGO8x+3Bc405hL48Ha1q/lBv8fi/n6L4U03EjbjXDTY9kUaYhaYN+vJrMfFtbToNKXfcqJ/QjzHHzC8subEYOYUoZ1QU9TIX5GNIDX+vR0+I3gdYCB5G6MZ3Laz+n4cwcj7oiTIpOrORpELkl6uFtbzAMoL3g3Gd4MSa3MqeQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289062; c=relaxed/simple; bh=Vk6bFDmVR0eydWLS78TqNF3dMof+YgbdfAs4lP1WhE0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QMP0duxveQ03oLQopUE3/pzGrc/CnwZCi1a9Lru/gmMR5MJnPF6JqnU+0ULzn19KqcffG0nk6HbxtmLdHbbKw9aUEk6WLwpkfCZ9C/BoLEHvux+i2kz9Dv9lpZnEdloHh5V3TqX8PS9ZwELpucDqql/jhr9iQ6DJpOsUF+K7lpw= 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=dcc9Do0V; 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="dcc9Do0V" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b4716fb2508so1769564a12.0 for ; Fri, 15 Aug 2025 13:17:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755289060; x=1755893860; 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=UCan40y/zjv6ovcMCtQie3VVVYhwoaYNuUUlLHYJCrc=; b=dcc9Do0VTHmrfCOn8t/ytm9+Gy7I3foKqNoZ03rUygaIF5ZsY5hqUqZ+kZ+Ex6rwLd 2B38hZ1caNcG6VM1t9bNtkPy83+u2n5aZTpMRiShNnCAM+RY8PBKakfjiGB8OWkmFKQK FS+1+sE8tEsy3cUuru8qcHdgObUrXsV4ce7CdlrdOjbFsLIFH8ua2m1jj8xY7oHh4uNj 0N2ST63BOV6ds3Ed2CgFjDG+gc+WXsW1RW/1YzKySKSsb2/lKOMsGIbd2yj8XTwO3Hmb cAiiEsPwSFO7oOb3Uo+jiDeC2iXfKgQwPTOe48EbtPSuOVB563RrgLOd7xj6ejFKb8o0 O1xQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755289060; x=1755893860; 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=UCan40y/zjv6ovcMCtQie3VVVYhwoaYNuUUlLHYJCrc=; b=AwgVtvB/R95uVNEIx4SnUM1Qx3Bpb/PgkHLhV7EIlSTvkEKxzMFgM9d3ScOmCI0QYV AXDQMSgYwbsIApRaVsStQHopRPZoJMsJRIRjbUD+EJ3Mpd99AkhPY3gj4em3n5z9bhKP LbBA1QxWi7dyV0b1wUy/lfco98r9IW6c4PhhIHCOn8h3x9r3O6Bzexscxf+logQcMNY0 Q2/Q1B7nfhrW4Y19gl0mLp3BhXzCCtVNwAO4ZIbyS7olapECdPvcynZEt+8woh8ZTrDX f4QYhvNW3RsHvj9zOh+deezVVg3w4Tj8nmFuQ+dKJnXdcu+PXyobNREhx4qrejl7D/Qd FlqA== X-Forwarded-Encrypted: i=1; AJvYcCUFNkVMlPHA0AGhmzI5mos035nkKj7k+DDNf9pltwQFw89Kahk2Tbw+cquyLigftvxdSQF+6Q==@lists.linux.dev X-Gm-Message-State: AOJu0YxDc/rt3/IcMib3pw1Np+ZjPcTDLzodiBG4AZeI0oIe3TqEssfS VL/Wyb2RSJpBV55pyj1jpTzeGTDZyQWUHkFIVrq8ssjGVg3ghJ75zDRZ4a+4telgGy0eIz6EfrM h0EcvBg== X-Google-Smtp-Source: AGHT+IG+NKmG4fQxWApznT/iNlBlE89VZOBkEiuZXVixRsMQFotYGpJhNutY1IkiTXx8XPjH7buaFadPEzU= X-Received: from plgo12.prod.google.com ([2002:a17:902:d4cc:b0:23f:f3c5:dfc9]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:22c4:b0:23f:b112:2eaa with SMTP id d9443c01a7336-2446d8fe30fmr49723005ad.41.1755289060168; Fri, 15 Aug 2025 13:17:40 -0700 (PDT) Date: Fri, 15 Aug 2025 20:16:12 +0000 In-Reply-To: <20250815201712.1745332-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250815201712.1745332-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250815201712.1745332-5-kuniyu@google.com> Subject: [PATCH v5 net-next 04/10] 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 Reviewed-by: Shakeel Butt --- 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.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:18 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 58D452C1788 for ; Fri, 15 Aug 2025 20:17: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=1755289063; cv=none; b=oC53NbbxiWZ9bbTBa2g+aVaGt3FfJ62krBg4eZ2BZI+VpSYUG1rsW4Cgobk364Dm5+0XEQOhrc2rioJtdIsHb+SdfEMGrppNzFzNNXZIfX6X5I7ajQ4p8EvS6OooOQpDC069Z26RYibqNLdp0yS0D2BF3dba0k324I5Q9kROc5o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289063; c=relaxed/simple; bh=49AUVqRZ9QX0gApoGVu2lLYolROcKxAhbfDoW1MZFwo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ZmUVMgHqKDGbKqBddAbD9+VebRykdcBOS8k4N/yfikeG3erCXGDJiKdUlKgyozjmjtr80p+nitmG/MKurHq8iUXQmqfUFt/kvZTMOALz9LdpeNrPwcenaqOktzRhKPONmRRhUBUEkdfjSe4gAqSdcp6n0kU2DPaqV82+P0pF6M8= 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=yWVJEcmw; 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="yWVJEcmw" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-244581950a1so25982795ad.2 for ; Fri, 15 Aug 2025 13:17:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755289062; x=1755893862; 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=jLtDPiqLV2EwRjVXqP4rO8+jmE13TnvcBQt499JidQE=; b=yWVJEcmwxdDDhHDcbZSdXm9Asrh/0eMzMIZQReS1yVmLoRHBOM4PbPtePoWZPk8291 yUNp4zTVTxWQv0tUfDXCivZABLa9J2dUNAzy9sqegCs8Y6Us1SuANQCu4XbSAsRf7f9X 7ic3G8p/DPYhvp9+q410QNmRBaC/LUq3kJ02u/DdTyVfZ5RpriMHERk9NBKE/4QKuTDO C7+pz+bq7Yc7CLfNAyP5rkMGDRdhMQHCFjiSM7+9kSMzVeDfbi7YDTYZQS5J7BNFxNkF hnOSJ2b6zUODX5LR9fblTX1NO29NwurC2j8Yg2KJf7B7QBDoQY9rM2581d8CY3Wr09qL uzaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755289062; x=1755893862; 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=jLtDPiqLV2EwRjVXqP4rO8+jmE13TnvcBQt499JidQE=; b=FNwGL4K6u7cjBXyUHdPwBK/NsgOnO7LVxwnWXjqRZYURjsbkyQ4y0l/OyGfmYM2LYa mIUrGVnM9IcXpQYXox6y5aEs9ukKFkuiMokQlD931CrSC5bBS37nWtaKmIcHegeMvKmQ GLUQS4tBxzYWmhrZd0MV+duN1HKNSDSUlV+ui+sVF09FbJ8F87kpa/JqXOSvcG8jlmJB fgJ3uEhPAthJU73U1dm855kwHHxq2cXB1oUnxbLl96JAmcWLI3JlsjeiH4sw4ocq2a8N JXwTPVf1M+mjNmcWGV8QS6CUUP8OdnNNQ5dF6P7XPpTbYufL5dN/Wl+519iQ/hDQZLqK ESZw== X-Forwarded-Encrypted: i=1; AJvYcCWGF+lEDoltcl9S9HW7MVwwLuocLk+P0TyNYQTx22uUaV3Dtmrx/Rq01F8uc0xdDAgTjxZAzg==@lists.linux.dev X-Gm-Message-State: AOJu0YxaLaz/zGA/50Mp4VeR8hLaxo6E/KFsIW4H/gYqO9EFXRPohUH0 7qSRdBXGTHpsdYMVl6sRaH7uRlUksIy6b0iYJU0ElSh2ajJX3CuF4nSxSN6aRJ1wXP7TAcHXto9 sjWpY6w== X-Google-Smtp-Source: AGHT+IGYcQH7/mF6y+bCQF+wvj8byumWi1k0Tu655xRzdfVqKzsBybbZLpijTnLaQewu7vlc+0MtmLwfX5c= X-Received: from plbmn15.prod.google.com ([2002:a17:903:a4f:b0:243:5a:ee2a]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:32c8:b0:240:3239:21c7 with SMTP id d9443c01a7336-2446d89d237mr56657975ad.37.1755289061594; Fri, 15 Aug 2025 13:17:41 -0700 (PDT) Date: Fri, 15 Aug 2025 20:16:13 +0000 In-Reply-To: <20250815201712.1745332-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250815201712.1745332-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250815201712.1745332-6-kuniyu@google.com> Subject: [PATCH v5 net-next 05/10] 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 Reviewed-by: Shakeel Butt --- 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.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:18 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 A412D2BEFE2 for ; Fri, 15 Aug 2025 20:17:43 +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=1755289065; cv=none; b=RCGCL3WzyR69pRvtcI0+lRc+1UCYIyPbBeKmjEtehnHM0xySbGEMi9Az9BdkrXIHfOmHYx4qAQUi4zAdDdrekhAVDIrdKZiziEXNqKiBXCNQo6McnARQyeaqHK92onEuvmP8DpyzG2SU6tfGJDQXLTSu0rYexm554YmvFnclFcc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289065; c=relaxed/simple; bh=P1p5zDYS1xHxFKHg6WTbv/b+iunvjNvMXhiBxP982n8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=R/oi8mkABDTpa7oIS4yi1ANbmkTOUD6BK2BPEkoNbwWs3ADI0wt/uvrK4xzorQ1ZwvkDhoixdO8nH/N9Zg8sh2pYb6M5cMKSpaAb8LtLULjdp2jmLpL+L25ymZDQRgd7cEQyckZygedL2aoVC9w3ibfGW+Y/EED5La/IFmcnHm4= 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=jFcQuG7/; 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="jFcQuG7/" Received: by mail-pf1-f201.google.com with SMTP id d2e1a72fcca58-76e2e614889so2160209b3a.0 for ; Fri, 15 Aug 2025 13:17:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755289063; x=1755893863; 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=NEvnK6Pj3gN8OdhZL7LCF5Umn99zHVRI3UVJuWX8S7Q=; b=jFcQuG7/RcVIeWvxbMskpzWAP0CVkeSAUXY9fnmdnOFi6cyskXKf4MNpD6/k+nXbAk 7hkDjM6ZCc8RZhoCGwFWetdWHsj6aqtkwf8ckmiP6+3DFoe8/cYhICrI/wi/oIDZ8ALT 5VpgFjYN0T1g6SBSw3oe0Ay17FV7cGMLOx4PHngy9gPo2yfoqxG/oCQ6SfMwR5LOM129 TFpEeG2T9wOe+3vi71+wwtIGH6e5HmDbJU6zaGO6ho7lk/reFBfmGSUEK1ROutjk6zm3 wlZjyFzLOZYOFu/a0MNUL4Wql1/qdbP3kcUM8EMQ7/ZERmidPRHnLxDJU+76xee2ETMA JHAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755289063; x=1755893863; 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=NEvnK6Pj3gN8OdhZL7LCF5Umn99zHVRI3UVJuWX8S7Q=; b=rSomSKjO67lNx8xdt2RY+d5W7KxQjsHodLY1w/fNcusNObuy+RVeOfMHKTXdbJL5qN WPL/qOG5RdVQesBDTve5uCs0TinSi64fOV8uEko1Pzgk5IaSlbMuWez4F+53VbvJiykW hEB2yXdmvvuUtERESpYl2xkTtxq6j83t2rE/H6/52Q12zoHmSH/UCOJPann800XqAyo+ dJs5+OSN4DBfU4VMDwQg3mKg8qpQkRAx1OhdkIvFCPJo824xTmqxdEQ+m1EO/skSF9cR OXZzWC2XV6Y+5eEZWw+ScJ5qy+qvq6lADuvod/msWaYCMqlPbKPMb2VIW4HC1LAD9dSd XD6g== X-Forwarded-Encrypted: i=1; AJvYcCX8CFkkJeg3Cm6JNvuRHVx/Fh35oxzzHjiUsJkvVtGDYDFUiAGkXVtI2iZzDYZJhL7BA6xxBw==@lists.linux.dev X-Gm-Message-State: AOJu0YxBIjv5ZTBGSOA19viTuNlEiSlAO07Xdvj5ElU4tsblHA+ERQQf 8yzFta6IdSsdGcgMToN3q5f3Xg5mhBDZcBe4zYT5fkiRKj11Fss8yl3uxm0YjY/3WAi8Wt6FZpU laL4pvA== X-Google-Smtp-Source: AGHT+IGxIv0S/KYNNnJUfMwOQqTXy3ZcIqfpFjU2Pag6qHi+6din+ir3U6VMwmjnJzZZKWJVJdk8nIATIm8= X-Received: from pfblg21.prod.google.com ([2002:a05:6a00:7095:b0:76b:d868:8052]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:1391:b0:748:323f:ba21 with SMTP id d2e1a72fcca58-76e516e9174mr461779b3a.1.1755289063124; Fri, 15 Aug 2025 13:17:43 -0700 (PDT) Date: Fri, 15 Aug 2025 20:16:14 +0000 In-Reply-To: <20250815201712.1745332-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250815201712.1745332-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250815201712.1745332-7-kuniyu@google.com> Subject: [PATCH v5 net-next 06/10] 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 Acked-by: Roman Gushchin Acked-by: Shakeel Butt --- include/net/sock.h | 12 ++++++++++++ mm/memcontrol.c | 13 +++++++++---- net/ipv4/inet_connection_sock.c | 2 +- 3 files changed, 22 insertions(+), 5 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 46713b9ece06..d8a52d1d08fa 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5020,19 +5020,24 @@ 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) { + struct mem_cgroup *memcg; + if (sk->sk_memcg =3D=3D newsk->sk_memcg) return; =20 mem_cgroup_sk_free(newsk); =20 - if (sk->sk_memcg) - css_get(&sk->sk_memcg->css); + memcg =3D mem_cgroup_from_sk(sk); + if (memcg) + css_get(&memcg->css); =20 newsk->sk_memcg =3D sk->sk_memcg; } 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.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:18 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 528502C1592 for ; Fri, 15 Aug 2025 20:17:45 +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=1755289066; cv=none; b=OpXKE/DzVlVsInLrcV+XOkyO50fnvisni1lfrgIDfXbcyv4FmbUBDoP5wRK1nVWdz0I88KTndAIaxtX32XhCu4aV+Wi4YHqhergGQKwP4MjJy0T6XwtQQqQvSvI+RGzFSTEIoGynWNFkz/QuB88XO9tY5CQs+onRvx1kwABj/C4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289066; c=relaxed/simple; bh=xgpsREOCYRY1NWdqxf1bGZBj6wbqBx7wgP4twWSHYDI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Xu0gbEg6Ix8BGj1dPT281mCG2MYbTRwEM9Z5v4X//92jhRQnCQemmGNlYDS5Di9ReJsqq2kKFG4RsNtzMgdXM+MIPEz9JuG3F3Q/dhM6hqxL5egBzgsEIg2zn1IhwLdyFk061BW+Fd5LZvalNpKRMx5kKrSJ+5FyIvkQ1Sm2JWE= 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=fXnKArIS; 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="fXnKArIS" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-76e2e614e73so2141798b3a.0 for ; Fri, 15 Aug 2025 13:17:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755289065; x=1755893865; 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=8Mp+7e2gfxyzJJta6x3bXxbo+4BlzrD3g7OeGza9E6Y=; b=fXnKArIS0gLqYZxasD/qbIVJQ2N6TqrNZKjMag9Od+82m74wQXzijQ7xwKFrLFkBco dM0pElNGzV9rwZkYyCWETAClFh4tTR6r4mtJRmoEXh5YKIcfhcse3ITfkCOU9kwK0l3i y8bmF3b9iWuEbp0r+CITGCdXw/6XrW46MFXCrLjm6cFLzqJ5zN86cd8fdOKCibMHCPYp mj1SRS5hhyAmBMHTDpYnYOWLakCiaU7QHbzRbekOYtHA8nx7GtB+bAUir3IrbJva87hV 524fgv0YohEc5P60eYUVgBT34765WJ/DFNcltTy9tFqcfMwACvskJ45zw1dz61DSfVNy hy3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755289065; x=1755893865; 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=8Mp+7e2gfxyzJJta6x3bXxbo+4BlzrD3g7OeGza9E6Y=; b=bv9UX+dhJnnAIYzPvhggDux73M7e+WiqMN0WDvPdhbMdluNdgp2GtoZxcLVrj0DyrO 758thlX1HQJakEPUWtHZSm/05MV9yHrHbLUIEePcVMlRdnEuO7Ww09ypA86+P/12iemn FA5RtVGBAt2VwS9e/7gHyKVyaxZmsVGL1TyKR1jXLy6z79cHiOiAWsA6R1xShYLvlzls 8CopMOHar1rwrL/UqXUkXKVEyMxPb1C142tf8+Ck/RDeQYmpygUov8oQfo6bFpRYbkE1 +byY2olK5GRWmdb5hXRQ4LF9ud5FzRfRy3MWEEJdOirR2nrLsaU+PfaSbDP7FaIypDtZ gnDA== X-Forwarded-Encrypted: i=1; AJvYcCVbxToz+4BTMYbmQjIDVhFb5nGQJ0EzP9sfGcN7OPnYA46R4Juu1aq1xbb80G05jJxVcXGQkQ==@lists.linux.dev X-Gm-Message-State: AOJu0YzjyEQEvrDCuUvfHPQKSO6XMwTBSgvZMIyDsZGiKLRJMOx6oqPX Jy6BZn9mW0uGW9A/Ayxghr8N9P5ikjYydaknakrAuCuytqsgpMuPeIcOiUM5nXzNzgXovFinGTd q8Tz3VQ== X-Google-Smtp-Source: AGHT+IG5FBv3Dc0dvsUM0MYH02dugnLFfR8sX8Mh4NHngLs2eiGnFx+J6RBCbR3sas2sD1KA15Q90KlIGAA= X-Received: from pfrj12.prod.google.com ([2002:aa7:8dcc:0:b0:76b:3822:35ea]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a00:b42:b0:736:3979:369e with SMTP id d2e1a72fcca58-76e446ffb04mr3567357b3a.9.1755289064709; Fri, 15 Aug 2025 13:17:44 -0700 (PDT) Date: Fri, 15 Aug 2025 20:16:15 +0000 In-Reply-To: <20250815201712.1745332-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250815201712.1745332-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250815201712.1745332-8-kuniyu@google.com> Subject: [PATCH v5 net-next 07/10] 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 Acked-by: Roman Gushchin Acked-by: Shakeel Butt --- 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 +- 5 files changed, 16 insertions(+), 6 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); } --=20 2.51.0.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:18 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 D6F01302755 for ; Fri, 15 Aug 2025 20:17:46 +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=1755289068; cv=none; b=nyyff33x7287nCsgyFFNhpP1vMr4VAqn10vpoxzXkFzRW3cpgbf0VqToGipwvDf9gO3i1CD6EpvxyYvmi0AhFscGZn4xeU/d2DAdZiQD711bfPkzq+XwOGzCFJYbp7RE2IjUwO65/4HHhYkucvMcWGxe/M9Io1I6bLlRpRruW48= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289068; c=relaxed/simple; bh=suM19LgjkKO83Xld9CyJYPHJ6rg11N/UNfS+zxoIKCM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=rKPVd3gIUCW9/mSEgH6IcVQJmGzQere89jaEm6RI7pGRToK3Tf1sQzcFunZzT+VIS0S5z8SAp7genj5+UVLOYNdpJ90HmCum+VfxihsGW8NXkKu6LpDdfqPfFkigj/PU6L+4XBMF4ZQxu0RcFiiMhDtx10Gcc0O9UjFCd6xrWJM= 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=HC5o1J0j; 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="HC5o1J0j" Received: by mail-pg1-f202.google.com with SMTP id 41be03b00d2f7-b47174bdce2so1650805a12.2 for ; Fri, 15 Aug 2025 13:17:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755289066; x=1755893866; 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=GfW0AKjgNSELXjjoDcEX6Y6n+0gVaLsZmB/XYkuwP9I=; b=HC5o1J0jFlQLM8p0Tujjd+8UsSkKwb5I0Vs9CgU62ynPHTWCqjSkxeP2ZgEK54JzAG MtkV/jbHCm5U4FCI/LXm26LKtWai4wi2YRC2e4ikMt/qJJXKEBj/rCc3jK8sIuiCMOms MOGZEPYaZMcQxY5QfObzqrRBdG3HVFnOEpEMsHAlSFAGw8tDl8cd6pdUtCRcaFBQHySR lRMwq1XYGExdfWLOH5ZTo7/8SiAFrE3tZ3+i6zt23aAAQgziS76CNJ/JSpWyIME+tJyM cExnujp0zg7u6zglTtBelXKB5DF3jPl9J5OppmBEonmG6Px1gjVr7IhLCFSlQPtjfWi8 30OQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755289066; x=1755893866; 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=GfW0AKjgNSELXjjoDcEX6Y6n+0gVaLsZmB/XYkuwP9I=; b=A7wugW70XHYmic+1zII3sWVthX8VrJ/6tU4GUOAuBfNFvfNvzeXpN2fQQYDFd9aCre Qov8zFeqOHEUep72f3J3HQRsZrJkSjEJ5b/pfVJmDgbkxh45ghaHRwVFzdGFH/1Td8MK 3IwDDqmfHvT9XXZhK7IARuPreDKKzK3ByLRcH8EllEmtv+oStglwO0RkdP2BukCyGXXy PzskxK3SfCNCLS3/oC6m0eV1Bw51qRB+wen1tiLuTngg3+cR4OEwdL6HDMMbZS2eoBRO n2jufY64HMEoZ5UEcKBM6yITD5iczSIsO9FjdcgvcuDXbgTkohAaSbCeXps98+gB7PTN q8Rw== X-Forwarded-Encrypted: i=1; AJvYcCVIMvbuAulVKE3QIXddHPaNFPaQ1QAMy6nzD1h0nL/eH0StVhy5ozibY9E697bNHxNy3WhM/A==@lists.linux.dev X-Gm-Message-State: AOJu0YxxE4HeM4qkyTIUU11VxhqhlI0KiBAbr+ILJ7dF9DT3DyDVQiyH gUyLYKDtDW69auc25NMAGSCxT1EMemr8L+EIfvnTq6C7IcoALDHDmHrQWcqDfNr9qkG1fkWn8K+ PWOboOA== X-Google-Smtp-Source: AGHT+IElDnvoGmI5tD6Ho6R2PezWL3Vx1xKjyABAEM7ehtZ7uqynZz9sJvg0jdDpQOByEtsqMjA1ed/8pGE= X-Received: from pgbeu24.prod.google.com ([2002:a05:6a02:4798:b0:b46:dae0:dfe8]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6a20:3d8a:b0:23e:19fd:e182 with SMTP id adf61e73a8af0-240d302fdd7mr6071025637.13.1755289066069; Fri, 15 Aug 2025 13:17:46 -0700 (PDT) Date: Fri, 15 Aug 2025 20:16:16 +0000 In-Reply-To: <20250815201712.1745332-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250815201712.1745332-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250815201712.1745332-9-kuniyu@google.com> Subject: [PATCH v5 net-next 08/10] 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 Acked-by: Roman Gushchin Acked-by: Shakeel Butt --- 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 d8a52d1d08fa..df3e9205c9e6 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5043,17 +5043,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 @@ -5066,12 +5068,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.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:18 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 506563090C6 for ; Fri, 15 Aug 2025 20:17:48 +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=1755289069; cv=none; b=AcFMKPPGcAQJ+e1fz0XauU8oz6Vq4tFleBTWyclTNPNeu5ZyAONC1bMYvLSBtVWRTkYgPOK5y/PVHUTsyLWfEQCc5JNEDaEfb0+PTIXlPAy8ZZvWIlmRBbCJa8+1jfUCVGpHG0syaGOMXYehuhxYcUZTyJj/lbuuy219KrJti3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289069; c=relaxed/simple; bh=vh18PK56P28TAsZ8ZPMuAn9/KE5M8PEvCAMdT85jx+c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=jxWy0zzLPg84xRxul668e9OyvuPSGnbY5wqrd6p6vYEugQF7nZeEs+MTr1LANkgBlb5UYg8FQTR55DAWwXhVRAwYTApMFQL98ruvVy947GF84NNJ4ZkLHSQ943HGTwAA250yG9P9CAMedVerfHai8/TUcnTz+S7X3D3gavSsfuk= 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=llbz07iD; 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="llbz07iD" Received: by mail-pf1-f202.google.com with SMTP id d2e1a72fcca58-76e2e60c3e7so3681301b3a.0 for ; Fri, 15 Aug 2025 13:17:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755289067; x=1755893867; 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=yQG0GMWGg0EW29pjW9cSPQlAKpK49JIR3c7s4HvSqPM=; b=llbz07iD3mUDdKtxwIYdlHPZS1i8q/6qpfSNjkl8vIgO2Hn/fZsNp5xWsgxw9muW74 VsWTvhC6pM/TtIaR47Ub5yzz8VgJOqWJV/5XThnffEyCjYRvcibrds72m2e6ubtI0w28 8BftTs+swOsyhGIyGiAh6G7I34zIAYe+j43wYbn7alDeaaUIDBmYMnBOVgfOtU5LsDtW 4VELcqSb1YpeCzTd/pM6S8/8DTJ52JPvJCmHCnJk4ArLMsMRsTGu8HlFbVmRFx7sIeYG weCthG93HayBKkU5lLY7zhf+Fi8dvgAENWXT/NRY+ITiZOERzhABtc+wGjr4nZG5S3+O H41Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755289067; x=1755893867; 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=yQG0GMWGg0EW29pjW9cSPQlAKpK49JIR3c7s4HvSqPM=; b=d66lLqd0iShw21rMOnGX6jzZiwlExckM0Gh7KdAPXWHMJJ2zDbJ8MqWRlcDoqWKbNn mGg20RIzF+7br+9e72iLuwvxGOCeYUdG9PehA7kWGdE8UMuZRw+E9wvE2BE0BwBHRgmm Ge7hwyEdJOO12pSxd0lcUHc+2llBhW7RAV0kffVlH5QGUJYnUGxTZ4Nl0pNmEUv/62ED SXBdCERaKhHW63osewkY7ObLX1GIlUc6ZPayJefhEq5AQxWtY5CwGx/nld8Am48kaorA 3VPxzKFt1tI3/jaTxcfD06xPHTXt44EpNxIl6odbaRRJsWWuxePds41DYHAiAFl+kfky nl6A== X-Forwarded-Encrypted: i=1; AJvYcCXnkzLx/iwRkgIjspWUpSy7rCjYYFUiSRC3CeUdCALSW/455OPI5LRr88ax7REfQp/71hZpOQ==@lists.linux.dev X-Gm-Message-State: AOJu0YwLSJM1+ruxgQlF+OTeG9gtZNiPj+Q0wrCM8tnVGWCEUpAD09ea z2bY0tH2yHarpdEB0I3YE+T1ph3hwlR9aclgIg2tDo8Nhk7ckHcSE3R/MG0gjEbDqYXYq1eqsbo xoqDn5w== X-Google-Smtp-Source: AGHT+IFp46sq2D48DZO0gUoHI4Uo8szEk8EClj8DpiFjSc+NkMZfkRfKF8J0RyyXgIbY22ezjmDiUSSBttE= X-Received: from pfbfb7.prod.google.com ([2002:a05:6a00:2d87:b0:76b:b0c5:347c]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:aa7:88d0:0:b0:748:2ac2:f8c3 with SMTP id d2e1a72fcca58-76e448632b2mr5380061b3a.24.1755289067566; Fri, 15 Aug 2025 13:17:47 -0700 (PDT) Date: Fri, 15 Aug 2025 20:16:17 +0000 In-Reply-To: <20250815201712.1745332-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250815201712.1745332-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250815201712.1745332-10-kuniyu@google.com> Subject: [PATCH v5 net-next 09/10] 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 Acked-by: Roman Gushchin --- 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.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:18 2025 Received: from mail-pg1-f201.google.com (mail-pg1-f201.google.com [209.85.215.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 EA04430DEAC for ; Fri, 15 Aug 2025 20:17:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289071; cv=none; b=kMqaXM27aIaW7yj+Bfcgx2QJHvgAtkRga7drdTU6PtDJ9LA+NtIBahnx2i5O0+nOueNarBEauh89XcXVZPXYNx5LRiIxXwsNUG0B1FcSdsI+o/jXpNebCnb6vrZkxciXAf7d95O1rMrXcq/HuPL7RYg0pJFRNy+W02bziEgAe6I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755289071; c=relaxed/simple; bh=MRR/+pSEWAeLMgDmwMpMUrOeg1/9Qpf6YfZ+Z/dvLPg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=GAasNPEl38+IBzlQoVLxit84rTE48XkaJNPDG+KtKYwlHHr1+4du/+D96xiaF5qlGah+IV66xPART9m1fSTC3OxmlXR5wjdO4t1e25HjKqT9tfyBVEdKfbs/wPubZ5J6c4u3YRaCpieTGhnIsnEWRLrG+xqCOxTqbhKuKcz2NNs= 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=uaG0t7o+; arc=none smtp.client-ip=209.85.215.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="uaG0t7o+" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b47174b2582so3555651a12.2 for ; Fri, 15 Aug 2025 13:17:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755289069; x=1755893869; 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=Kf92k/WXre/NA9XVBZNM2RHpUQnxne1oa7jt/AbjtmQ=; b=uaG0t7o+cDC/S1/vZfCLrid+7a9SZ10IdHSAZsZDFDDOZpegS6RA/0O2V/KSdGjgR7 10egZmeh8X7+GZSltoQzDJG2+ZWVSXMehboszwTDqLZJmyLOot6e5/gt9quKNNbJhTh/ Uz+tfzFnbMSWi1OeP0QXeqzo0JxE01igAZzjfP4/q2ks0b8KM4PdfT/siYBMCcQQbX4i OajXniByrJg3m7jBTp/8jmfnVGgfnug6d7awq8U8ogInWwOF5izDj4RUqOPDTxQbYqAw xPmVr8RhRGrUM0oTRw7UXXNstcnVyX3PxXBDXXW/XiKt5XPSxAsvPuuperA5qoNvXIK3 lrfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755289069; x=1755893869; 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=Kf92k/WXre/NA9XVBZNM2RHpUQnxne1oa7jt/AbjtmQ=; b=OJSvXj3zkxyQxFuexCo9vH6amPspJVbpt8dXUPxO//7GS0Zm5o+MIjswomjTFtCITR 2PtkPAp/FiYP2zQYaS2dFxBNFj0+QXuqLa3HlbhJZDI3Cga+cuNxo84gWy7HbD51kn6F SrfHPCYPizv07x1JNQIIYXxHyjSVcrqA3wUDO9e7L0MrDFPFIHIu1RJsUACMkEbZtUrg eIMkuZe/hGuLNf3kLwo/p4rFdA4R5z8sxOGsgo0NApXacJCKLjN8z4aw12S4fW4VtLiA HzOGhWIu9IgTqEpfdWG/o+wzOYGWvIgUSIqdjJOULynzBnga16lQjOgPuhnJBjUl4Zen rhmQ== X-Forwarded-Encrypted: i=1; AJvYcCV+AnXm34RglMKl8oNYD2NZ+gweqEfqtjmK48eDUzq6U/ODSCV2aOFpl63z7gBpmL4ceD6vXQ==@lists.linux.dev X-Gm-Message-State: AOJu0Yyja2ZrY6VZBz1rCF4EOIbAHiKeojzCVpFgKabxCrUtZzePZf2o LGea64FJ7JisdVjC3VNlFsOW/U0bxm3sUvWx9f7ayPrCCqgstNq4rQJQToqICns6W7EcRlBdV2k ZPSuC6Q== X-Google-Smtp-Source: AGHT+IHqEnxA1uJzc0XPdj9fJKBo3wWRxP+lR/iywZBaE8USdSC80qtRAT2PdogMo7IxQ/C4U5ZzQhy0h2k= X-Received: from pjbli13.prod.google.com ([2002:a17:90b:48cd:b0:31e:d9dc:605f]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1c06:b0:321:cfbf:cbd6 with SMTP id 98e67ed59e1d1-32341e9b0abmr4796319a91.6.1755289069062; Fri, 15 Aug 2025 13:17:49 -0700 (PDT) Date: Fri, 15 Aug 2025 20:16:18 +0000 In-Reply-To: <20250815201712.1745332-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250815201712.1745332-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250815201712.1745332-11-kuniyu@google.com> Subject: [PATCH v5 net-next 10/10] 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 Acked-by: Roman Gushchin Acked-by: Shakeel Butt --- 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.rc1.163.g2494970778-goog