From nobody Wed Sep 17 18:19:47 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 492F5245021 for ; Thu, 14 Aug 2025 20:09:17 +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=1755202158; cv=none; b=HI1RJGjtSJCA/wSb2oni43P19D4BHzyKVo3/M0bVnEfizxFltb2V7kQfmYJiPiJ43u3tyKN3likmHRoSl0G5rQdluijnz6EzI4b9AW7pNRsWpEuMYt4UsDk1qdiBRkDcbmn95Zmxcl3eGvQZfphhkpn98WvtkA040ZvRgZ6nzqs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202158; c=relaxed/simple; bh=fvAGsFxK8Q6F6blwPxo2ye39EhyRt1qY7ZzQ7uTcLDE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=T3hwYmqo4ySeudMZc6+0OfBnOzRawl+xqxM+CPjeOMuXxA646SOO31DWk6Vq4iFGuhacroBI6LKwjHthwZFVjCOuSnwuqMs5oiTFZjxjO48xxjf4uapPIlcsdx/zUJV+not2LyLUDiiXKNL1EJ4rziZY0xTDHOxC8r5H9iu8bOM= 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=piy8Y7tJ; 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="piy8Y7tJ" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24458297be0so27084685ad.3 for ; Thu, 14 Aug 2025 13:09:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755202156; x=1755806956; darn=lists.linux.dev; h=content-transfer-encoding:cc:to:from:subject:message-id:references :mime-version:in-reply-to:date:from:to:cc:subject:date:message-id :reply-to; bh=t+lbZziEhh3LGkLKxCxKqhss+KocSzVWnXytm6X5LtU=; b=piy8Y7tJ6eFzqOGe772vrJFE6y3m4WxMFbOzAUtj0MeowPXB89gmSIUIEEgu27qzkV 9XxmGAFb4I6xxoUpZHUv7qIFD3bTno8trhkJikshqyZrSfPLYMllObuTKXd7Hcpbu00y n+lH2//YqdaH7BPbO8DmVooCnNhkszbXPb4jyIXpIAhEMiqxy7K4sTcqg/d7T0ALe3t0 Br2k9UL67LhPe62hVmF2biNdtOhI92FU/hXKMBOBm/b36CkpE9rzkwgcRN6PGdOMoxjs 2zLduJPACzOeB045p3QdUHb0WU0nGwtzKbvKesx19BH6H0HdmFc54Zg+YaBp7B/rwl1a ANnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755202156; x=1755806956; h=content-transfer-encoding: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=t+lbZziEhh3LGkLKxCxKqhss+KocSzVWnXytm6X5LtU=; b=fFyErKSBu3YkygD/NndbxcrSpIcxXJEUOEyNzDjqeRzxnSEkI+6n3aXuuaWXXZ8SDZ 9InsnBE3b412UPb+JJQZyYGftq/rmHzHTP4pW+f702sFm7qUQee7/gUpVUMxoaEBeFRO aEXD2X7eWc3+rMSvs7wMKDs6gSdv91O5F5cAiMjM/b4Nkl9NsjJg17c12p3q4ugDd9sh gx+N2hI1v9scP3F7BK1q9VeifIpqYbCNb3LO9iKNxl9MVWGuI3wiJFOs2908EOMSfjzU S0E0KJFbHqSf6qttD85Q1u9My0XLASphYef+j6xBwlG0djzCO1EG0YffTLsJPkIRJojP yRsQ== X-Forwarded-Encrypted: i=1; AJvYcCXXq7xxuziRZQ9NW2vwIYJFAivNdEUT/TPVmjr0NswqyWr3Wg1rVeiZqQr0+bSOekMQLx8A1Q==@lists.linux.dev X-Gm-Message-State: AOJu0Yw5RqxXlN6AMq+YhdwCFVjkxlsOkIBvqy/iH8jbioAnVMnmSDmz iouf7MxkVF5YFrRzu75SkWhHfm7XmOhGZ9ld3/9mK7UiDRqZwmQSFg9SHqzxAy8VEGQDmSDB1NY vIgJSOw== X-Google-Smtp-Source: AGHT+IHNfSNaLlVBh8qJO1UdhldaL8UMFcUbGeFSWhTNIR6zr5rZyXQBo099O6LvTp4kIOMl2zLxqruoWs8= 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:902:e851:b0:235:ed01:18cd with SMTP id d9443c01a7336-2446a3c448emr3523915ad.44.1755202156412; Thu, 14 Aug 2025 13:09:16 -0700 (PDT) Date: Thu, 14 Aug 2025 20:08:33 +0000 In-Reply-To: <20250814200912.1040628-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250814200912.1040628-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250814200912.1040628-2-kuniyu@google.com> Subject: [PATCH v4 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 wrap sock_create_kern() for subflow with set_active_memcg() using the parent sk->sk_memcg. Fixes: 3764b0c5651e3 ("mptcp: attach subflow socket to parent cgroup") Suggested-by: Michal Koutn=C3=BD Signed-off-by: Kuniyuki Iwashima --- mm/memcontrol.c | 5 ++++- net/mptcp/subflow.c | 11 +++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 8dd7fbed5a94..450862e7fd7a 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5006,8 +5006,11 @@ void mem_cgroup_sk_alloc(struct sock *sk) if (!in_task()) return; =20 + memcg =3D current->active_memcg; + rcu_read_lock(); - memcg =3D mem_cgroup_from_task(current); + if (likely(!memcg)) + memcg =3D mem_cgroup_from_task(current); if (mem_cgroup_is_root(memcg)) goto out; if (!cgroup_subsys_on_dfl(memory_cgrp_subsys) && !memcg1_tcpmem_active(me= mcg)) diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index 3f1b62a9fe88..a4809054ea6c 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1717,14 +1717,6 @@ 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); @@ -1757,6 +1749,7 @@ int mptcp_subflow_create_socket(struct sock *sk, unsi= gned short family, { struct mptcp_subflow_context *subflow; struct net *net =3D sock_net(sk); + struct mem_cgroup *memcg; struct socket *sf; int err; =20 @@ -1766,7 +1759,9 @@ int mptcp_subflow_create_socket(struct sock *sk, unsi= gned short family, if (unlikely(!sk->sk_socket)) return -EINVAL; =20 + memcg =3D set_active_memcg(sk->sk_memcg); err =3D sock_create_kern(net, family, SOCK_STREAM, IPPROTO_TCP, &sf); + set_active_memcg(memcg); if (err) return err; =20 --=20 2.51.0.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:47 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 AB44A2500DF for ; Thu, 14 Aug 2025 20:09:18 +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=1755202160; cv=none; b=JOz2lD8/CSOmfV1ThNgIuE725ErNDlU/j0T0lCwSH52HRplkn+rIO2wbE5POEUbf0oDKIH7bRCNX4iB2MAnob0thwkmL33SIW84YGQJn/m5tl9/BB820taFuRwv3nSfdCnV6kLSGqwxs/YmAAeTeUVfIxKewDW6YTmKGekH4g/g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202160; c=relaxed/simple; bh=XyVZJFZzKfSSIkf/pvmLmwKjraQN8W4KgjzemH/XGU0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Q+Hn3YDGT/XRpwhpMSUQSA5YMF9N8M3H+DN4x/suH1gZhIoGZDjlJX5qhmklqs0ZpuPn6HX6HTIFsgEBPQTOiziPwuZVednni4w6x8K9SKxA+L/k0vWmGEufVa62R/RK0Qh5dXWE8i6pd3MjDVHc2wdkHdpkzA+yHiSZhdn2uL8= 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=EhMlBfnl; 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="EhMlBfnl" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-323266b41f5so2682285a91.0 for ; Thu, 14 Aug 2025 13:09:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755202158; x=1755806958; 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=EhMlBfnlLM4d5XBz+lLiawNUniVMZ3TLPGPxt2BiQuimU0ST138O7VPRUR+elCLC3h DKMFXGbdGVbFvpyr7C1hfThW/CfEtR/X5a4ki6vzzIsYgyhCE7wNpxssDBxN1wuwbRzX NbQn3EDBH36ijHaYzkYHkeauoyEkBc+gIMoZtlwKYNuCl3MC0kOcSJUsdyLEM777XSRB LXIS+YGF3b5BUgi5KoBjlJ6eVBh9SNPNMOhlTXQBCXho75Q+ghxdKUGURYTBpyqKLlX8 2aEZQ4DVmVONL9IYXmv5L52lTYdX3/1ayPMxT+gk+ceKDysDavY3/yQajDCgD20+HZOU iEEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755202158; x=1755806958; 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=ECGL35H5jxsfTHBigA2FhYlkf1PrmZeKcQWWZEA71TkxkygiSzCTfe1EVx8ej73VRJ P8UHqmEBvl5LBevXsslYamBLNq8wLUPbzns1xAuDjlUJl0bMmSQUia6YJMv4VAicOEPx Q3UJq66rm9iL1+VZ3AyAYROqKgqad6lY0nh9zDeeOosNOkvqYpstY7ZLEN0CZhwK08ke yBmrABplvh/xEyGb/Du43O4CopDX8/dcrh8biw5xAUa5KtWg5vEk6sF5NYt60QMDiWwZ rKeNw1Uhh8VA7I2BZG2VXHhqA050UYzxJezT0vBYqWTifIZxp6f3GiugFCrtiF1/688D 0PSw== X-Forwarded-Encrypted: i=1; AJvYcCXJu9APA4ecg6Slwsl82ciwcYzu85rdQYcaLCBEAKUS33jgm3tInf4w4HX+uTCDXHB2J+ygbw==@lists.linux.dev X-Gm-Message-State: AOJu0YzJ552sWf25jzhk56ojMrUeDEHF6xMwWh+9faLNYkKMR5mgwJrd 7qGGKP+fOmObCC+VJ8yJvwsK8NuJ84RK6olwSMYBmjHEtpNp1rhqMIN8y2LakPfU0fUo5T83KnK aJDSaCA== X-Google-Smtp-Source: AGHT+IHJqj8OCBO957elyCb7Tb9EvqaiAKT/a7fghGIK2eeAw95lJXxXFobtfukkiYu1/mXizBdvqnwNOyA= X-Received: from pjbqb16.prod.google.com ([2002:a17:90b:2810:b0:321:c300:9aac]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1e0e:b0:31f:16ee:5dcc with SMTP id 98e67ed59e1d1-323279cec2fmr7690481a91.14.1755202157953; Thu, 14 Aug 2025 13:09:17 -0700 (PDT) Date: Thu, 14 Aug 2025 20:08:34 +0000 In-Reply-To: <20250814200912.1040628-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250814200912.1040628-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250814200912.1040628-3-kuniyu@google.com> Subject: [PATCH v4 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) --- 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:47 2025 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (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 1FC1A2550A4 for ; Thu, 14 Aug 2025 20:09:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202161; cv=none; b=tulixD47bXUI4+wG6F0OPBpW7MAvOW7YuAxlQErk3zuZFhpR/GNXapdwFZyiTbWHIH6/1MECahP4soPB0OC5SR8/TK4ZCslUL4Np1id7Wq0A5Pw1N/xC/hmHKefHbqXuDqhrpg9V9vCMsGd62jEaVNLIxvBhazBx0NF3dUUxE+Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202161; 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=Qqg8MBzfTSxhwHTvVO4NW6hmw02/OW4LjX30BiNHsGshM2VdAKxTGuhvY2bO6VjaxcFzcF7NJPOqoH5wOoI9nXWTy5RyGDRWUGVRAjoMgfU9PNMgq8W2FRPLfdjQ5gxPGVZm3Bbk1TB2mZS8K54kcr2Pzkrn2oUJcx0hpN/HvBE= 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=RYrYrLp4; arc=none smtp.client-ip=209.85.216.74 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="RYrYrLp4" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-323266b41f5so2682326a91.0 for ; Thu, 14 Aug 2025 13:09:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755202159; x=1755806959; 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=RYrYrLp4J0uGOd//mNUIG/wWAawfE63uP+EcK2zn8vjmTW8NUciNo/tbkT6CDNhVDF u130iQMlIy33w+Gurr5D4C9f9JYgvfFcZLObkWatuSl2ct4iQSsDzM5NpN8XGar038It p+8HL9lvUS8fYueF6BkLhIVDO+YTG+M8UdWWn1tE7FgyhJ41BcTZQEaTjKCtGSaIMmtu +P3AAw+nHRNaWcv9HKPQ1JENrwr26c7M4+obxLvKZaIONfqU4MNHSd+K6PFbNFv8pfZh MyRvk5Hf97JRmGfZUrMpd9EbVH7xcJms0ZChOwyYFToV326aJjxJMuzZvlpfoOIg0bbj EhYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755202159; x=1755806959; 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=ejgnG+4hIvK1KSNkKw0JfkWibXwbTtZu7V8XHoq394iLjTKq8EI/b9fLDI4iZyGtim cdeaDOfyahPYL1NK/zEyHOp4NSrmc0wseduZXgU+34iA2QLNwI7PAVR9zW0wViRyE8Qu ilOuGHGgs/0PoQSGyUAWg2RYRZXtWhX7/0pdGAt3mMupuSHCBMvuXyBgl0sQF2+JMTQZ ULHvEF6qlPv4WKDwymilYn4nb11NH4g2g3FZWzcOgwqfW+x5P3k+vIn68FiTWrKPui24 YxuCIIP533Gdr0dbjs6Utk436KMEzAJzyjyZLS22QdX3q7aGX3LWJvCJzf7x1q6uXAC+ nmdA== X-Forwarded-Encrypted: i=1; AJvYcCUBSQbk46WGfvEZZ7U44Vj1DsITA8GZPyoHVH0YHD5Kn4aHsI8fdgjEPaPshHj94eoHJVQb9w==@lists.linux.dev X-Gm-Message-State: AOJu0YzBztOQRx5TYNcoSmx5tDZftLxvbS0JR5TgtlpacBCo0KaIHUSR As8FhaC2dGixCmEm4AUOyNai+fVImdfopEz94IInOZg9WKfYjtgAyReEORmQwZ6vbyOfVxqUORR CFBYnKA== X-Google-Smtp-Source: AGHT+IH+nzG+2OcnZiv+3/UMTbEq2fBzLGSyOMqRhyX99l+CDhgD+Ism6ZOY2XsIJISoEwSwcdBmJbzd56M= X-Received: from pjj16.prod.google.com ([2002:a17:90b:5550:b0:320:e3e2:6877]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:1d82:b0:321:a1fc:a425 with SMTP id 98e67ed59e1d1-32327a8b7c5mr6718040a91.26.1755202159430; Thu, 14 Aug 2025 13:09:19 -0700 (PDT) Date: Thu, 14 Aug 2025 20:08:35 +0000 In-Reply-To: <20250814200912.1040628-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250814200912.1040628-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250814200912.1040628-4-kuniyu@google.com> Subject: [PATCH v4 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 --- 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:47 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 A03FD2571B3 for ; Thu, 14 Aug 2025 20:09:21 +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=1755202163; cv=none; b=USAnmLwmaV3Ri2LON4jx10to4+KzS9Dc08kOYkg6CnbUjsCgQEPvQrNRPIqSGNXoANsiDI8Hi5OFhKa2fsscUbaWLKLit7UcHJOKhcZesWr8/7+LjuyUzJCcg5AOypXRiBKwCS2qOc5K1D2S67B56zNGMSXwDmRbu8MKEfnBaDI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202163; c=relaxed/simple; bh=Vk6bFDmVR0eydWLS78TqNF3dMof+YgbdfAs4lP1WhE0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=j02SPKlUacsyAwD+4YajjDr2lIw8CzTMwh9ltFL+6rPGQCnJv72OOwPGZJqjp6M09MSacW/r1bUSO0OfMpoE1XhKd9ZeDGhci33hClhsz45otSG+MJHEBzQObkGop5utQwjRCHzpsHgXWfsIBZ6+P/quQrHaLgaRYTRnl2ih40s= 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=vyo0IZJl; 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="vyo0IZJl" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-24457efb475so15483495ad.0 for ; Thu, 14 Aug 2025 13:09:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755202161; x=1755806961; 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=vyo0IZJl+Cwo6hUwZqq0Do4efOu29G6wyVyYSzLoJr7WC3fVGN9q0LRovAsegDvy+q pLVnWkp0tk2Fm46PTO+GfJ00T4qk14a8Ok1YeW8Z5pOTI+UYFrGM9ap9LWTFeDq9vMMJ /re4T06L3oTquax08Yq3jajgMuuV5LWXMnod6c44Xj8pUBjxtZBbZ0ekYgxGlugeJ4HM 1+AGfObqPFQZUkpDZHCmN2rPG2flkzDs8tbtvaTVSetNEHcO/Myd6tqkOKNaXgHWiaxB w292eEhK5xVCdpsL81aavJl2PDOgrVN3BGUQnjPhUZzuKDJSCl4Z1N5CnDhwNknPyRxO 6W1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755202161; x=1755806961; 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=DkszQ0fP5FXN8fuR6DMc1lS2SiZZ0pjezyx3McCXVK9mYelBS5YOn6WjJLTYlGfSC4 mVrdsd/LaG/yjnpFcg3wMAe5gpsQrOnY37lIF5K2hYSqDlE3uZXdf9CVSaC3+SCdkN0u LJt0RTIKHdW+TOChTQuTwRLF7kxAikOoS335TE7cu/wRDvaOQICJRNqWttZlDTYYltWm C+YfCXO5gxETRfGj7YkvNftmgBIXPzvCo6AKXyGOypdedN214A4I2v46Tn+fJmgjtC7s 5AttgqF8yp41ZKgBGNZi9jb5VdlvwaIrZtQPzmYwJ23/3UIKvTHRSOUNsbkMExVKJuJC idRA== X-Forwarded-Encrypted: i=1; AJvYcCX6kc0h6LBZuVfuVGrVkFKgCB+5OLAtECrn6KqvlvshqqMggJP39qMV/K1FGdfnmMZANLZCaQ==@lists.linux.dev X-Gm-Message-State: AOJu0YyTFQObeaUV/r8ViqMmbgiPpACMQUJB+kPQvMiuvU7PltSdMWGp Sk5LA7HZ9FaFvX+SySI53QZW+6OfOZcf41FjfrGog8B3LetjglWofiLODHLo60HUJUHa8UP5FDL 7A9+0pg== X-Google-Smtp-Source: AGHT+IFZG58mv+xFex5I3IvbaYDViC565d/Zaj2y0+6TxgO46lJTn88mwWlXmxsJcHxyM0rDApPblLTIl7c= X-Received: from pjbpl10.prod.google.com ([2002:a17:90b:268a:b0:321:370d:cae5]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:d488:b0:240:92cc:8fcf with SMTP id d9443c01a7336-24458b58443mr83319395ad.49.1755202160983; Thu, 14 Aug 2025 13:09:20 -0700 (PDT) Date: Thu, 14 Aug 2025 20:08:36 +0000 In-Reply-To: <20250814200912.1040628-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250814200912.1040628-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250814200912.1040628-5-kuniyu@google.com> Subject: [PATCH v4 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 --- 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:47 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 1B8582580F9 for ; Thu, 14 Aug 2025 20:09:23 +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=1755202164; cv=none; b=apTGn21RcqoepndipPD5ewzXTPRsTkiT4GzGqnB0Y6w6r3KWa3GQxsCsuHU776PTi08FthzmJy8+kUugjM5Pxwy0gsvFTuyP1ewrkJHVl5RIFhAl+/1oeJ5+F7Vztu0KkSguxt+B3IjrkFvoyyb4EyZKqkzUAbUkgh2xsLuoXJQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202164; c=relaxed/simple; bh=49AUVqRZ9QX0gApoGVu2lLYolROcKxAhbfDoW1MZFwo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ksNnaDKU48cTTky3fYxtAofOg3qh807TQCsG7UK0sBLDbBgqHESy3+LSyG3QA2Q7EpzWlrWFZQsg1zZkLQGhMt6XKhodBjl8nHk5usd/c/LcF7Q4Lx3BNR3/Po2o+2vyS2/jWKbsFMtf2k1thUDPrpJV1YBNQA3Ucw5ux7RBFvs= 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=HeUpD7xA; 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="HeUpD7xA" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-32326e2506aso1343980a91.3 for ; Thu, 14 Aug 2025 13:09:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755202162; x=1755806962; 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=HeUpD7xAvujZv8a9EuNYulugW1qPffbWbEwN5HyrT1hLiTZFT++1sp8oZKXstAXMwD yjSS935JsKCXzT/ZptbgGvyy1JEPnXNdUs9LMEzUPpGDoCEhVqSjX4uZVYj/qFCroH9f aOOiAcvEkLTqAR886tF2KYdnI/ct1GeEiGFuQZgQMWxS7JoWx4B1TmyexwHqagcSVdZf 88atdrB5VlTbishZS99fPBoneb3WUn0heC2zHufGHfrRDlPds15TAMViDkWj0lEGpSd5 4MG5wNruqP74ANdntMZ0MAOtZuE0lUsCmAieTlz57MB5LqL3kTFc1ic7EnAJ7xys/jS7 ZS2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755202162; x=1755806962; 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=dFE1R+RyvaNAlo1VfwBcPVvo+x4yXjUtlGnafwRC2qvclCs0aUo5yyTfUXgMTyVCWI ZzVlDAS0DjsG4jpSL4zz7V6Q+5Mtu5F0uS07tOeVHLd3RbmSresvEfJbReYsDWh7Wa8a 9r5Ur5+2kQZ/vPTZKJHeP5XLoVPOPyRgFTnP03zyWKUI1pL/z9NE/N5Jolnsj5ORFPRS nA/k9kewq7AfKhFhCp/x9gVKNVJyZVkH4CI5nEiE07amukIvraAiZEMhIPx0t64IIQPx nn0WCrqzE0TRNPp+00rd/CzkAcY66rkz1vFSPcMh/iDlblpBi2xAcmHJHl8I24clSH5H xUEQ== X-Forwarded-Encrypted: i=1; AJvYcCXbYD5a9PGvL8ZkrlltFC3+yxKCrEPdZ1Q2IK+yhykAP29L7nw8jLR3Py8JLAyRrFe7uL3W5A==@lists.linux.dev X-Gm-Message-State: AOJu0YwzpjbGtT4Xyhbs5n9YswDLk8W/Kml1AdtW6AKMb7ETzf4dxU4C AfOvIpUEHAdGnlZqaIY3pM9QW/N4sdiLsUoZ5rVi28q7ThBdkXaKVsrQyzD0N8oIsFOGqoDqyiz LL6hFhg== X-Google-Smtp-Source: AGHT+IEnzVgsHouLcYJ3DbTYMYM7D5PJ04rrOa932tYqe/x5EOD8K/0yHeBrLPiiLhvGRF5AWh06+mbah1w= X-Received: from pjzz12.prod.google.com ([2002:a17:90b:58ec:b0:321:ab51:e32a]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5246:b0:31e:d4e3:4015 with SMTP id 98e67ed59e1d1-323279a165cmr7184331a91.8.1755202162465; Thu, 14 Aug 2025 13:09:22 -0700 (PDT) Date: Thu, 14 Aug 2025 20:08:37 +0000 In-Reply-To: <20250814200912.1040628-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250814200912.1040628-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250814200912.1040628-6-kuniyu@google.com> Subject: [PATCH v4 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 --- 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:47 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 908BB259CAC for ; Thu, 14 Aug 2025 20:09:24 +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=1755202166; cv=none; b=ArwNUKXTsugUBfu6TjpWHDpjmZ/HCj1LWhCbmekqO2R5nwlR1tOTMP0EkCCAsEr7JNCeKYYQNbzn2REjb46pw03XRLnKcjpBawuSxGWQHJS1q1ZUdppqZ/Yo8cQPkUTaBWtQrsoQDgly9yp7XLKca2fLfQpQ+47Eh6pCyeVQwFw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202166; c=relaxed/simple; bh=OYwhMqPRagtIcBUHpo/Oc2UFRaQswQzrbLGR0xfc4DQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=R4dHCdlcYFWd9s0Rx/gB+G058kEH2QzgmF5zrQ2AtzB1oDmkJ6UaJHkkjJ0BcBSfhPZKWc9kn8GjLR32YdILhKOdsr2vk8iiSOZVnA3ZzNdc8ZekJmxvZ4APcDVTo9BzcscbRhQe9cn9yfy+8lYCq2Ik6kVsPIM+ayCO0NGpHh0= 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=LL92KjVX; 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="LL92KjVX" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2445820337cso13305465ad.3 for ; Thu, 14 Aug 2025 13:09:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755202164; x=1755806964; 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=bMWDRwJwZj6qLhFgWvOz68lXKSU0dd2mnEaog5fuH+Q=; b=LL92KjVXPku/bKKpZ6ywRWt0Pt/Qkm/gvfs3Y2u9fbuh/ZSQuZAMP4Exzh9JhtYvJO 6W+4ox26Aq82gejOtVJCPP469G/qM+jBaek9zZ5poRxQZAzpup/NOP2MC0y5cDK7ki0M JVO11FyWZ7CxSaTbgWvpijMN0uvXJjfO5FqwTwyb1j34TpayPvhCUZFJt6o3AY6r+zIS UUAJs/JC5gsb5DvkdlqI+jgUvjcqXUd5m8afUPRnnJpbXDu4wBsHQk5d8XlvZQuVB2Xp KVXhLd88wpxFfR/zDRd3X2bJZ4DldFY/7EZQ6Bnaq6H56QLXXaJwcDCP/qQu5X+kJQ4y tPFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755202164; x=1755806964; 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=bMWDRwJwZj6qLhFgWvOz68lXKSU0dd2mnEaog5fuH+Q=; b=ALncMh1LVC0NShqDtq1nigyzQF/XY5ajzvcsdL04aPNhdjSTwSLDxvwLLCpkKGYen1 ArKiCzrOpqnKVqiVUdBdqXAd8r2GycpnA/qBuwSr2hAkaYibrxtMCgbSCTrC+1/gR+Jp razHmcxuhkwmkHtf2WEUq7bXrUVQJ9fJQNX5O152Ee7xqboiwF4beo6wRSVAAxmbT1Hl rs+8v41WmaTM4yTTPNMFzAvaIz1b9BwusCny54MaTIA40+mpvit6HWhLqum8fQQttcPQ z7z5HGu5nEWYhHiN7wzZwbGdXMKTjCz/5B6ny6FlfubaLHG60TpgtKflGyMzjqmm6zlb oeuA== X-Forwarded-Encrypted: i=1; AJvYcCUOTdq7wt30w4wjkNFzdh791fyscpEULj9IWrrfmhvoJmzKPAiEQeO1Uf4rX7Pn26OR1f0f9A==@lists.linux.dev X-Gm-Message-State: AOJu0YwygvzqGVOhDpmzXwp7c1qCJBDE4/Ce/cYNhkLtYiyD+0MftncP a/Dk74pnSAPKIWOg0MNMm9GjM/mJAus0DUyM0x69aZjLAJIY3KbTHREfyEOiuwKUQdSYnYte33n PNXQKvQ== X-Google-Smtp-Source: AGHT+IFje8BoX0rFMQZYCLiSz6us/b9pp/B+IiT79+DebSAxtnCRFOhBlrxLa4L+ahHzlUigtDSR9HFZ8z0= X-Received: from plhi8.prod.google.com ([2002:a17:903:2ec8:b0:23f:e59c:8c1f]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f54b:b0:240:6766:ac01 with SMTP id d9443c01a7336-244589fd923mr76041705ad.2.1755202163976; Thu, 14 Aug 2025 13:09:23 -0700 (PDT) Date: Thu, 14 Aug 2025 20:08:38 +0000 In-Reply-To: <20250814200912.1040628-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250814200912.1040628-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250814200912.1040628-7-kuniyu@google.com> Subject: [PATCH v4 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 | 6 ++++-- net/ipv4/inet_connection_sock.c | 2 +- net/mptcp/subflow.c | 2 +- 4 files changed, 18 insertions(+), 4 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 450862e7fd7a..1717c3a50f66 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5023,8 +5023,10 @@ 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 /** 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. */ diff --git a/net/mptcp/subflow.c b/net/mptcp/subflow.c index a4809054ea6c..70c45c092d13 100644 --- a/net/mptcp/subflow.c +++ b/net/mptcp/subflow.c @@ -1759,7 +1759,7 @@ int mptcp_subflow_create_socket(struct sock *sk, unsi= gned short family, if (unlikely(!sk->sk_socket)) return -EINVAL; =20 - memcg =3D set_active_memcg(sk->sk_memcg); + memcg =3D set_active_memcg(mem_cgroup_from_sk(sk)); err =3D sock_create_kern(net, family, SOCK_STREAM, IPPROTO_TCP, &sf); set_active_memcg(memcg); if (err) --=20 2.51.0.rc1.163.g2494970778-goog From nobody Wed Sep 17 18:19:47 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 389122580FB for ; Thu, 14 Aug 2025 20:09:26 +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=1755202167; cv=none; b=NDRSJ2KPdtWweZQJ0+RCu9ugWkt9GsDTuHaV+/DMRF/HRypG475tv8svXSfd2dByONqAstsnYnvU6UEIP4S8i35ZvhR+Mu4UnANnPhv8rpjTh9AtbYr0tEuBKomzSU9FP0iIgRw+Dg9lOW+tgZAJhyCyh++CRNmDBp2DlK5h89k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202167; c=relaxed/simple; bh=9e+MQL+1kufw9HczfwR0qRzJsdj8exP9jCcEPhaMv6Y=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=R88xqF45Qbk69iJ+bgENgTvXBc6+oarpqIbrFltFJ7L/nE7xk1ctgV3StCu6/fBnQ9OPcMdl2qYYkXL+XD+4qLOlb5cTwVCGOijDdmI6XPMmvJDPw2+8HT6kM+Vt6mLWJmAYHi62uGrmyM6L1PsRnIobwio6i+fXvF2KKw7ySlQ= 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=jbipzOus; 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="jbipzOus" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-24457efb475so15483875ad.0 for ; Thu, 14 Aug 2025 13:09:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755202165; x=1755806965; 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=RN4H8OhMESZggI/pZXAKf5UmJPFi9rM002XSMoc6emQ=; b=jbipzOusliTJcHBaDJCTu7e/x3nPvnexSAM5wniJbB2V53t6hSf/wESufeiGpMsBW8 j4i3lLmlNJkutPOS0qwy5llaPkswcSH/2MP7XCDS8918b24vZ881k032lYCLmnwb+O7D SL8yppUDH7U1mC/z/5pTxkUClPcRbcgLXnr5O8SlPVChMyd4borwSQUU3ENB6d/zOSyT XDLUWQaIAlID6Yg2DlA2VKkSBQntMBWlQ78GGpsh8YhZwDdbCliA2HpkJ+kWQc9YfKYR IFd/MG8lEbb7+pb00lU/OX6mYbYUVWW69OzNi/WNQQTHqwVXXdOJQ7TVVD5s7N2IJEFV JV6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755202165; x=1755806965; 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=RN4H8OhMESZggI/pZXAKf5UmJPFi9rM002XSMoc6emQ=; b=Cf04QitgIByPiBqJR+gPij8yz1fEa8GPK1yFqAwpchgtFbWjUr+bBtaXTYBg3EmYeP ln3P73dfKmVGPX+Hf+a8Pts4Cc2yKCo3zVq09FfnSbicO9mv7ODRPoHsq/0uQ5unY2sv xHHJdiG1tLZ4Kjt5k0dglM9UlweBYi2mEU8+eU1s4izdX3+tLGILXCZrbj762N5SdoYg oeRefRVpE78womHYNnhbgdavREP8C2xugWskWtX8aASSTMeibRgAnSsr2uFKP5mO5ecl EHeu1qba8cmPnW+0+tC4pYtv6wN4amhOOtWpSBVTn5sUKNMSFQqUwH/b00vX3W9CmgkY nF2w== X-Forwarded-Encrypted: i=1; AJvYcCVSVcOZufCUAy/aYGUza2i7HzRWPZ9qopRFEpLLHODDAJoHp28EF625/tx5W9IaGmQq/7R0Fg==@lists.linux.dev X-Gm-Message-State: AOJu0Yy0IvRTWXhu5jP9CNDL1wLt31xeVGwTqJNUDKDFlMvU0nIKHOTM kn0ZkuoCIfzTNkzP3Yw4DKqeezQ8VvG562bkEdIGbsN1KCowyoe6TTdzxBMoIE4morM+B1qlshG 3u8noVA== X-Google-Smtp-Source: AGHT+IGjybKWRKb8eGBGrIqhLAFzL1Ig08nwLcmkE6zoBHcD3GY1TtW/rYf6Ml05cqJS44L2U3FStQ7jMm0= X-Received: from pjbnc16.prod.google.com ([2002:a17:90b:37d0:b0:312:dbc:f731]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:32d2:b0:234:8ef1:aa7b with SMTP id d9443c01a7336-24458a4c885mr60555155ad.20.1755202165500; Thu, 14 Aug 2025 13:09:25 -0700 (PDT) Date: Thu, 14 Aug 2025 20:08:39 +0000 In-Reply-To: <20250814200912.1040628-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250814200912.1040628-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250814200912.1040628-8-kuniyu@google.com> Subject: [PATCH v4 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:47 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 C2C8325B1D2 for ; Thu, 14 Aug 2025 20:09:27 +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=1755202169; cv=none; b=JCEsHeFqx85Cl9gQn6h9izW1CJe2wE9YnFNgl26HU1q7GoZbo2pz1qXxaSiaCmFN4LSEwp08FsY/6pTkB3QY67MTY9Bf+OKfy/11x/sy/3ECLE30nk83b19OhTA8VLjnjm3p1khOgEmUrFdYuJfXrDRPiJvpJBkOpl38nElyXeA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202169; c=relaxed/simple; bh=wBgxnJgLekPbWtwUujx11FBhulM3TCiAE2w9nltYFJg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=HhFpDoc49nveTEx+NHjRm5Q5h3BvOxu2XMFENaDpANepFMk/lPynHbBM7ccY7L174JpfIfKPMQiSLw0aaUakYtk3CwxsVAa2a4Wzgh26r+y910zdosCCCBND2f4cCOR9ZMgy2uCf+2+VcQr0bi1RAssYVbdzzk4N4UqV9F8g3Ik= 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=fVX3bI+i; 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="fVX3bI+i" Received: by mail-pg1-f201.google.com with SMTP id 41be03b00d2f7-b47174b1ae5so933255a12.2 for ; Thu, 14 Aug 2025 13:09:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755202167; x=1755806967; 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=JqwQko3rlUblyrU4VKeLR8maNWxKsVT32Pjp/b8BmK4=; b=fVX3bI+ib3UBnvfKBKtETebP005oUVvnhPlMl++F5R4FE82WWuiAKGadGUPDht4/tN +vfy9fYbZ9ptVIYmrptRPTp2jozNQZW+KNC3dQaSA7N5CxwC+g7uVF1+Fs19r/naF5S8 VaLGzf+C/ba2AlB+/MAjarOA/NNbcO8tsGxowqZocpWgag4Z8Wx5U2Lb2K7bRz5+GyLo /19iDN22rMs2qngGdBy1ITc3/qTFMLb0oNdxLNty3gTIuUG3KMPyrppGdmvPxVF2EYTC PKizYzbn5BdlZJuKMQngMfPqzQGFf70gFopTyCwKKWoPecticaotQa0PirRUhaJ9e9BH ZZIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755202167; x=1755806967; 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=JqwQko3rlUblyrU4VKeLR8maNWxKsVT32Pjp/b8BmK4=; b=TAKqn7YwNktj+GE/r7Ls4hrJ8s5t2w0iBSQmXdEEu6jYLjXuOAoiWZgwvZb9mJzgd7 puMMK4/lR2DWpnMaR6eJPLE178tfgB0jSx3FUfl6T0Sr1ly948hUEmlMyLeaeASUWZLR W+Nrom3Xm570iIDm2Q8RZDWbJbckCSHK6JWnTFu9TIuqKbGVDOmutzxWqvzYgBdFCrO5 gcCj9gxZWFOsqtFcLt3L9TOnMpc/zjZgQuJ0KeASXmvyBDtZkxpTP83EEjR/9cuZFZ/F G+F8+MSjT/q536+UqMG1YXzG2MbX5E9Cw8X5Tszo8neq3UI8t43/EodjXk4Gpp6EH5NO HJfQ== X-Forwarded-Encrypted: i=1; AJvYcCXZGnt4cMEV55oW7u12s/anmhgJ/XtjZ1lkTOfCg8szMm1Ls3j6YvU8ROr0PGympNRPxN07IA==@lists.linux.dev X-Gm-Message-State: AOJu0Yyd8W6ezMKh1DDvpX2njroXrDsOl/20VSfCfzGeNBUSPDRkWSKo Rsw7T65jDPzDlAnmaT0nVUsdcJnyFPPQyU62w7q3iX7vEUYCvDXQTz6MDA19fsXdwm5LdWPHVYj maHvemA== X-Google-Smtp-Source: AGHT+IFpk9GsZzJtad1xWRq/jKEfmD5Hu2g99Bbrw9g4nsIfbB0KESQYa2J63MdiGdBZTWW3/moD48VO1k8= X-Received: from plbmv14.prod.google.com ([2002:a17:903:b8e:b0:240:3ef8:c304]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:f550:b0:242:9bc4:f1c7 with SMTP id d9443c01a7336-244586e0821mr67776325ad.54.1755202167115; Thu, 14 Aug 2025 13:09:27 -0700 (PDT) Date: Thu, 14 Aug 2025 20:08:40 +0000 In-Reply-To: <20250814200912.1040628-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250814200912.1040628-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250814200912.1040628-9-kuniyu@google.com> Subject: [PATCH v4 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 785173aa0739..ff008a345ce7 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1596,14 +1596,15 @@ 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); +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) @@ -1659,8 +1660,26 @@ 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) +{ +} + +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 1717c3a50f66..02f5e574fea0 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5030,17 +5030,19 @@ void mem_cgroup_sk_free(struct sock *sk) } =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 @@ -5053,12 +5055,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:47 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 4FD4025CC58 for ; Thu, 14 Aug 2025 20:09:29 +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=1755202170; cv=none; b=dEqlGgAfRXEqiNsgFWy4nvqj/0hwRQdWnZ7vPvuDRYuoamnoNYpToMQxxAiyUpWvQVrlJAxi0zCx5NBvVe7ES5lBQyVTdGJb4/CiveZ3JiyAWfwmFGUobKm2kFCPjzFjHaL9Y4vwJ9FhpIFesDYQ4sYhjyx1XFEC22a/BmDNFeQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202170; c=relaxed/simple; bh=0XUmvTwODNsLtlQN5tBduVwPTmibzhPt3TSnhK/L4MQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Khnyf46q3xmPZTFUK3RtMK1i5b/101AP019PUbNrGYLWGOVqgzb/X8jYfb00/a00sYyj1Dj85BUayMfgsqsPAay/tjqLaByKHi1GN+VRj7ly4vVatjZS587fpKJFCip6eeoxOX9WOzVKBt7VjqRYBFVD4ptzvmpakoWaiX9t+1Y= 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=wQ7Bexda; 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="wQ7Bexda" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-244581187c6so15773245ad.1 for ; Thu, 14 Aug 2025 13:09:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755202169; x=1755806969; 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=YO6ZjmNOtKlWEF8G8K+b4WUo0jZB94+FQ/E9TVkGFI8=; b=wQ7BexdaVbUEh5AVucF3ZPBYytP+WjnaeBasTpe4kJqwAhcR4uQne+8tN2GcbWR/lN usNBhXUuAf6xqd/gE8o/AlF5QnDBiWQ4hLYpOFGthWgczvZIkADdxMIOkzIap6qZkZ3J rHcaX591g38ohOHMUM+sEADVax4wGrkHEXtf5r26fZdTzTwrqLU0mVHIi8uBT1jx07Gw s3MDoi9XE+xzMgO2n1g2Z1uUqJbiiO9x8hno0htN09oUdo8U/c55ORm6jhlfjTjudxu3 PnhlbwB9kbo9QDFRnzeiHWeuUsBrR9u77RanFz/sHyAg4QohWD7f4Pfvle/+N9Ihus0X 6pog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755202169; x=1755806969; 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=YO6ZjmNOtKlWEF8G8K+b4WUo0jZB94+FQ/E9TVkGFI8=; b=GOzwSaF9V3SL7x/uYFPHpjITEkTkodndhviV8w4iYpXF5fJSZgw1P6EH+y2eLGZPph T72U5T1lQm/bpnuorcCb5qw+iB+eM1EoJ5ArH9zSQDA3jwTaaYzb0HptbDrZut/pJDTi w5N8nCvXxCvjhepqAF1eo6pBf63DcPZdDTigulJhwP1Vio0eylmBKmZ4KaUdb74HKZwo RDraqscFfirpdA9qXqKUODzwyWYiqqBXvKGofqetdQpuGqaunGxyuVjvM6zGARMKrW7c U+tA78DrvGWJtjyi31Rrvd0rcQRkZUxcCmGxGFTl5sfWE5ttN5acI8O7Y//hFxN95mSs 9AQg== X-Forwarded-Encrypted: i=1; AJvYcCVrQLZpZ5X2zihs8RxyWixHQcKKA5zDpyxdxSXPbCCdtwzTb9RpCpmCQuiQO8Nq8k5/Q1JxFQ==@lists.linux.dev X-Gm-Message-State: AOJu0Yy8bGF4NZFNmbTIdoiKDDM4nzotigfuZrCMrEdukTIrBuVzQLIL SWFblipkMlLB32rY8l+3ygC7lh1/kUQgBcy2VHGa0hPXSRmksKXb9+IFC8MW/lrO+RbaO2FLG/V 7otC2aA== X-Google-Smtp-Source: AGHT+IGw0N92d+X4yz4oc9MBEew+9vy8e7l67AOxNN5kdBHZQOpNiXDNq1+p3W0QI0ndx+Xd9tnK9OUDOCE= X-Received: from plbnb3.prod.google.com ([2002:a17:903:15c3:b0:234:c104:43f1]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:1aac:b0:240:2efe:c384 with SMTP id d9443c01a7336-244584eab3dmr62286625ad.19.1755202168661; Thu, 14 Aug 2025 13:09:28 -0700 (PDT) Date: Thu, 14 Aug 2025 20:08:41 +0000 In-Reply-To: <20250814200912.1040628-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250814200912.1040628-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250814200912.1040628-10-kuniyu@google.com> Subject: [PATCH v4 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 ff008a345ce7..723cc61410ae 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1641,19 +1641,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); @@ -1680,11 +1667,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:47 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 EBA6A25CC58 for ; Thu, 14 Aug 2025 20:09:30 +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=1755202172; cv=none; b=mt+JeQXPi7wD0JsdkZATgV9AkJQDtHRyuE7Vd7GF5tQsath7DteqAJNASR3W2BKCAcLW3qxC2JZwKTAS2IA6mPpnMuexr18Yt6QjXlf3LeVjK9VYWUQ+uxTiP0EYX0ReW0mG8ek6d1xs6VScygWZXcLwzRIhfQRYauSFcucosTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755202172; c=relaxed/simple; bh=uNJ0DbaVTgLxqMO9rrZlPFBGceNd4I5Fu6cwHhD2+Os=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=BsDhEkgA1eXToxTbt0rf4UTbR8xHqTfIoyNdydSe4NnLR9n8u5tlDhNyFB4fAPd/c6B2leClUU3xZVzDkjJYuxjCVN2E3IcNv+IG2QoqbWu7ETIfAEp2zD1MCZw3KcFCN2/Yz7tEYUdz/xkXd3ad5OT8HihXN6o+PbsyU2bcT0g= 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=tVZIsrky; 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="tVZIsrky" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-24457f59889so13173615ad.0 for ; Thu, 14 Aug 2025 13:09:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1755202170; x=1755806970; 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=UARZd9qLkSRlP8HijwL/4OYfjtGDpQLLXgE19FfQX14=; b=tVZIsrkyx96zajo8NGW5O/RfZBqXes4kp4iqrqozIBLof6RY5hVtXgwXGv3l5OJvGi zTXAdTQYc3wQsrXSYwEBF/GcubfuS3wu3tMy+vMHOHvuLsB4UK7cmmN8dd77GBGI+qPf 35Gg8342JhobXzLjjZnzsh4yi0KMxIF2mBG9kF8suVGz+ejW2hnaohc9IAakdZ+zWUD1 +Xw7gauV/++fgqUffpfDg7AEaOXYzEBKWYPLxOSywGJUWd6lznEJVuXNFeT0RWWxy84A AxTIq3Sq9UV7LPKp3XG11EwT5wou7lDdEKB/DNlEgWCTCGEEqdZDfxUvVp0vpu+Hur4A bd1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755202170; x=1755806970; 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=UARZd9qLkSRlP8HijwL/4OYfjtGDpQLLXgE19FfQX14=; b=X7L3kW1mFHpUGL9JUPWbQOX0YZevnrJ0YhCiw/+0c+d1MF5LreYtvH4Wii/Ycd2ljQ xx35XSMb4VpJzOrzw3q19+c/M6mRwbwk95GKIGFkLS2w4h8ivYU+9L2vV1eBGrTYyFEa elUGqSbXMlZchIyv/57scuNo7SFBOkv/WTxEqgS1b0mq2ugylHxUALamyFH8b5waUAX4 YlftzUd9UhSLbvZoF7BSZamrS2LvYYwURY8qEk3seN/cckiBR/Fud7/p5SCnzfK+0yKs 5bUJy1+hxyNqgwwr9AnNwUkna+67OG9Z/UWv/bIRpsUQFtX32RS+Fb0Bd7hniHyv9nm9 uv+g== X-Forwarded-Encrypted: i=1; AJvYcCWx2QtPRSsYlVy1VakFrmi/C2WYCESgp6qbbN1DjpuKQ05OVeNm7Pc1rIh1XrfbqSbYWuWbcQ==@lists.linux.dev X-Gm-Message-State: AOJu0YxDHGB/bs3kqrL+9252V4oRF0v91TH7rbJ21I3vov1D7sFYJz2q C1xm7Dhoqo/u4X7IjQko0ehp2H10HrnQrTHi8WZs/Gz5xSxHctxZNlevxdErJZT6Ml8qdcHivHB xrqJMNw== X-Google-Smtp-Source: AGHT+IEr2KzFw5L5eoFv7qE7SLsTY7h0r30kka9wgKEfCc5e8mASPVpzRfuL9JgzHtqNiN7oenCLbFowFlo= X-Received: from plbml5.prod.google.com ([2002:a17:903:34c5:b0:242:abac:216c]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:903:228b:b0:243:12d5:db43 with SMTP id d9443c01a7336-2446a15730bmr3842755ad.0.1755202170389; Thu, 14 Aug 2025 13:09:30 -0700 (PDT) Date: Thu, 14 Aug 2025 20:08:42 +0000 In-Reply-To: <20250814200912.1040628-1-kuniyu@google.com> Precedence: bulk X-Mailing-List: mptcp@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250814200912.1040628-1-kuniyu@google.com> X-Mailer: git-send-email 2.51.0.rc1.163.g2494970778-goog Message-ID: <20250814200912.1040628-11-kuniyu@google.com> Subject: [PATCH v4 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