From nobody Thu Apr 9 08:10:44 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 3531F3BA230 for ; Tue, 10 Mar 2026 03:13:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773112382; cv=none; b=KTOXqHEJ6wiWeqrtLTofY1jZh72fFR4ByNkYNynFKWUN4YpKzrehOziUlhU1W96mhWVA0A+6nX55uHv7/L9Qv18Vw9h4ILzOe5vam+P689J/xmz+pZmI02yrgM2bqP4zsjoKSNLFY+h4yoE7rAqSF94R0qFPVdFdqar7S/mxVLo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773112382; c=relaxed/simple; bh=dCwfTCGHxiZaqLLfQElMjU/EtsHoLiAIFvxC9jCEBtw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=asM0u5sTNa1ORJrCbmhtvz6Hxjx2mnOW+hB9+nBCLzuXR3D/6+UTwp2y2XJ4jiKYZk36zn+IVpqu5Ae86yqWxlwwN3bb1UlmoaWv5Ann27qNRndFMsJ7ja04hP6P8JzeqqmJRPKnJK5wLd1/O9Um6YVMeL9HLpQ7rmRs+qASyWQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=shopee.com; spf=pass smtp.mailfrom=shopee.com; dkim=pass (2048-bit key) header.d=shopee.com header.i=@shopee.com header.b=XsrWGH3M; arc=none smtp.client-ip=209.85.216.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=shopee.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=shopee.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=shopee.com header.i=@shopee.com header.b="XsrWGH3M" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-35691a231a7so7679715a91.3 for ; Mon, 09 Mar 2026 20:13:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shopee.com; s=shopee.com; t=1773112380; x=1773717180; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IJuSJm3X4xhlOG3+qvokrBOrPsbIME05pWUjl43X0aE=; b=XsrWGH3MWckqTTvqXhNIOy5Ihz/L1VNKkrXlU1g9DOAAlnlP/S9CkpaiA7qPZ8+yA1 PIsJQXmgdhKDuDi9D0fhEAtf2mMcORi1zCm1IFElm6U9Y91Pu5cKtl4buHl2AKuNnp6Y zUvowiqK8tASlH32sR46vEgV15r8mXR6YbcQe/Xk4RUoZ2ceFQ+pxDMnawfs+J9kNR8K PVI3UgrHfD53MJRjFpBSidHiF6PDoC95NoWHDse4JuFTyu4FN2VlZA07hkyCPk0FlcU+ hDClt8aoJxu7fAV0aG5MEUf+ZG6WXJ/U+58gdNhyV9sCe65c1akimvt1zvEvnlkB9BS8 z3hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773112380; x=1773717180; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=IJuSJm3X4xhlOG3+qvokrBOrPsbIME05pWUjl43X0aE=; b=rNR9bfYhLx7jAgbUqPLAwwaQv/eYYeDS6rZ9X1ldHPJ/5EuJT+J3wnD+A7Fhz7PemQ PLzXwGDe0bCANnh4EIzkDzv6Z2s9JyoNvvDg0TcgnVfAQOCPiFVH4JoYwTTLdBHBZV3F 1SbqcS/SEMmKS7z3frudKUhqmQuf70hTnY8xyv/iq/jLG3U+bapcfEauQYnLDNC+NOI5 9eECtNajzgUd+RMimLqZSWxHhqnR16r69k9XWf+STtBH69sZ5x3OX17G+qAfGtKOHOIl oiXNlEc4XEGbJRlisaBc/7+Ksda4pDLcf8D7Uqv2uPX97t0Ujtn9b5bXDpLzeRuX7BY4 YzEA== X-Forwarded-Encrypted: i=1; AJvYcCWLNiE0iGZMT2CzinXxqGjYwjPCAdT8OUNZVebtT+aUpNi9qXfC422XTBuBZmybNwzd7hPBUjWSaRkFWwE=@vger.kernel.org X-Gm-Message-State: AOJu0YxPa8/HfkbHy5rcLXQFifzw0IlO0xQfz/JFi/OC08hZgScek7z2 gX4PBHD/OBKvf8dKM6g0AA5QKX0ZtNzGs77aqC8KyLgNTLRYSfS9b+tcbAGizsKeD88= X-Gm-Gg: ATEYQzwGF9uWg+i3Y1FC6oraJFg3yuvWGlsDabQb/5voTdCe9UGBGNHmoSb86b6hhzq 7Yksth77QLzmdgQRnMHlx2vzudqK4wocHfQmTvA/qcSzCymPXWv+P9OM7fM8VyRvr2YwK+Wc7ai O4oP31beOurTUgu394tv7AjlFl0wZVqyhvCy4xTzgVygYx2t9NwWQlpgkS3BFm7yjRRprjCebRT 6W6jLvE2J+Q41vwPgVY7w9IKzfIx8RUH3GAfoxIjHDyWdAsuuSUC05EqDXvaHP0MSSPd54y0fuc KR99S5ei5T0uIjQW6nPEIjjfrJl+kbp2yaP7mwTnpk9iqJ+CPeGKxmUBDr/pwxuSRhfCrPUpvUV +5O4Ls3CUzbfMhOTK5nS74tdWto5I+mW4X1LiDuAW7+/waET6EJ0tJRa0NoHCsU8TceO5pNdBZk G6XC/Gkz6QwRbEXVuHgLHYjT1RzxCAx+NaQRKMHQ== X-Received: by 2002:a17:90b:288f:b0:358:db7b:f686 with SMTP id 98e67ed59e1d1-359be30b2e3mr11977416a91.26.1773112380605; Mon, 09 Mar 2026 20:13:00 -0700 (PDT) Received: from localhost.localdomain ([147.136.157.0]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-359bcc28f0fsm5169284a91.13.2026.03.09.20.12.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 20:13:00 -0700 (PDT) From: Haifeng Xu To: akpm@linux-foundation.org, david@fromorbit.com, roman.gushchin@linux.dev Cc: zhengqi.arch@bytedance.com, muchun.song@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Haifeng Xu Subject: [PATCH V2 1/4] mm: shrinker: add one more parameter in shrinker_id() Date: Tue, 10 Mar 2026 11:12:47 +0800 Message-ID: <20260310031250.289851-2-haifeng.xu@shopee.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260310031250.289851-1-haifeng.xu@shopee.com> References: <20260310031250.289851-1-haifeng.xu@shopee.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a parameter points to target memory cgroup in shrinker_id(). The following patch will use it to decide the id of shrinker. No functional change here. Signed-off-by: Haifeng Xu --- include/linux/memcontrol.h | 4 ++-- mm/huge_memory.c | 4 ++-- mm/shrinker.c | 12 ++++++++---- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 70b685a85bf4..a583dbc0adcc 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1634,7 +1634,7 @@ void free_shrinker_info(struct mem_cgroup *memcg); void set_shrinker_bit(struct mem_cgroup *memcg, int nid, int shrinker_id); void reparent_shrinker_deferred(struct mem_cgroup *memcg); =20 -static inline int shrinker_id(struct shrinker *shrinker) +static inline int shrinker_id(struct mem_cgroup *memcg, struct shrinker *s= hrinker) { return shrinker->id; } @@ -1670,7 +1670,7 @@ static inline void set_shrinker_bit(struct mem_cgroup= *memcg, { } =20 -static inline int shrinker_id(struct shrinker *shrinker) +static inline int shrinker_id(struct mem_cgroup *memcg, struct shrinker *s= hrinker) { return -1; } diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 8e2746ea74ad..6050f8d71587 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -4353,7 +4353,7 @@ void deferred_split_folio(struct folio *folio, bool p= artially_mapped) ds_queue->split_queue_len++; if (memcg) set_shrinker_bit(memcg, folio_nid(folio), - shrinker_id(deferred_split_shrinker)); + shrinker_id(memcg, deferred_split_shrinker)); } split_queue_unlock_irqrestore(ds_queue, flags); } @@ -4509,7 +4509,7 @@ void reparent_deferred_split_queue(struct mem_cgroup = *memcg) ds_queue->split_queue_len =3D 0; =20 for_each_node(nid) - set_shrinker_bit(parent, nid, shrinker_id(deferred_split_shrinker)); + set_shrinker_bit(parent, nid, shrinker_id(parent, deferred_split_shrinke= r)); =20 unlock: spin_unlock(&parent_ds_queue->split_queue_lock); diff --git a/mm/shrinker.c b/mm/shrinker.c index 7b61fc0ee78f..61dbb6afae52 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -255,11 +255,13 @@ static long xchg_nr_deferred_memcg(int nid, struct sh= rinker *shrinker, struct shrinker_info *info; struct shrinker_info_unit *unit; long nr_deferred; + int id; =20 rcu_read_lock(); + id =3D shrinker_id(memcg, shrinker); info =3D rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); - unit =3D info->unit[shrinker_id_to_index(shrinker->id)]; - nr_deferred =3D atomic_long_xchg(&unit->nr_deferred[shrinker_id_to_offset= (shrinker->id)], 0); + unit =3D info->unit[shrinker_id_to_index(id)]; + nr_deferred =3D atomic_long_xchg(&unit->nr_deferred[shrinker_id_to_offset= (id)], 0); rcu_read_unlock(); =20 return nr_deferred; @@ -271,12 +273,14 @@ static long add_nr_deferred_memcg(long nr, int nid, s= truct shrinker *shrinker, struct shrinker_info *info; struct shrinker_info_unit *unit; long nr_deferred; + int id; =20 rcu_read_lock(); + id =3D shrinker_id(memcg, shrinker); info =3D rcu_dereference(memcg->nodeinfo[nid]->shrinker_info); - unit =3D info->unit[shrinker_id_to_index(shrinker->id)]; + unit =3D info->unit[shrinker_id_to_index(id)]; nr_deferred =3D - atomic_long_add_return(nr, &unit->nr_deferred[shrinker_id_to_offset(shri= nker->id)]); + atomic_long_add_return(nr, &unit->nr_deferred[shrinker_id_to_offset(id)]= ); rcu_read_unlock(); =20 return nr_deferred; --=20 2.43.0 From nobody Thu Apr 9 08:10:44 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (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 9D0AC3B895A for ; Tue, 10 Mar 2026 03:13:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773112386; cv=none; b=e2zD/eNUpXWXMR9GxlqOfkiCjd3Y30oa7Pvx6YZFuKFWOf6pvnwyPT0UmcmCmLNoAemNbnilZHQmM3YR1V9kCLMZ6oEFh6uV9uuKZOoKOyVRMSN3Mbep+DSYuzY/rU8Rjxq2Vl0JfDYrwoCbG6Ep5D1uTbIGCCXMUaSriy4MWZ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773112386; c=relaxed/simple; bh=eP4rRkrdvvo7zSt7SRouGHMKrIys1GBHBWGYBH5RubI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nrB8tRlAcUL1m/8avT1ULB8sO35ltjMlDGwpWyONt/htxp0iXHFfh5pRxZJ9p+jXni2WZ9SNLODhQnQIiMMpVa2GTY59QYu0Xqn5gjxkXks2qeobEqwPPrdriTWi6JMeT008oQmP7BZuhCXwwiAusee6Gd5O7sGyoIT3Q4/eAAY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=shopee.com; spf=pass smtp.mailfrom=shopee.com; dkim=pass (2048-bit key) header.d=shopee.com header.i=@shopee.com header.b=gDl6yMtl; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=shopee.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=shopee.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=shopee.com header.i=@shopee.com header.b="gDl6yMtl" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-35995cb33a8so4831024a91.0 for ; Mon, 09 Mar 2026 20:13:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shopee.com; s=shopee.com; t=1773112385; x=1773717185; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+OzUwreO0Fx04kzL8hUKy9/smwpH8GzkcqgpiyONa3A=; b=gDl6yMtlAifkKXSFqtP9S9izmurKifrhgxoTz2mcNkUZHbQ2Cl5h5j0fPzhtzFNr1m QFW/e2wOyimv4NNf5Q8f0+bctaFMZZ1IVKIM/NATjonIhv9R3SmqKbqwt+B4QyDiH5hG GzzWwhP0Z9NxUKnmpo+UtvS9YOkVSQr03s37PJkFNuD1tFxKJsrvsQvHnS69mvmaHJZs u6KEWlmGe/E7D3dgLHW/08HbDVXuZwvr//tLPzpTrnAx6zWqA1g6pKdeq1bgvFE6Zs1+ SZ8UZd9HLy7SF1GcgRCi7gkYgbO7Cv0Q1jx3ojEfPyM1e6x6EKsIL209NEZRudpOTp4y /pdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773112385; x=1773717185; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+OzUwreO0Fx04kzL8hUKy9/smwpH8GzkcqgpiyONa3A=; b=EDD6eu3k4IgrfoXQBf8edUP7ctcMNCby90L0uEwWbw8y7mvC5m8tA6qbWaKGOG3KuA nK713mIBE3rke6wfpVhlHUkU7PIafkF4vOx4EqcrVMnmS6eRi1bOlZX9z3Rr88G9xfX2 Cjm1Z4rBT9EI4GRKOiZos/4ekzZ81Huyx3asbCp9C0Wvt9+7vFas9oTC7meLhXKOTAeb 1oy67Vlucz4Hbv70tM8UFArYqymvxFRfzsIrvStvFhnJeSd4fuZ/1L0dsRWS3B+nb/jv zkBRpP/JEU5fQ0DVDGenabpq8sO86ELdjTnUaTeSV53sD4EkXqiCqm3xvnzrxhfcsT1U syig== X-Forwarded-Encrypted: i=1; AJvYcCUMgpW8GikzuYb/cSwJx5zRa14sDgxqFAZ9PwsZRVXtUiXkoe7GPgMiHe/Ja9taqhbLYeJqY90cjNPJSW0=@vger.kernel.org X-Gm-Message-State: AOJu0YxHPDx2SRTCwDoBurDzWN6EtsmHBhHBdXezG9eMksFAixG2sKVN YWDlDL95k922pZJKkG475Aky8txTk4LAkUGH6jowK97MjawhHgcFeLsCWhiulMDIhv0= X-Gm-Gg: ATEYQzwrHFxZVgS/nvjniPsxhBvJ15d/K4brB9aHlBg8FrzLgYARM6fd/rtEv5/kHzO GiOW5eiF4uISgPAvppEZ40McvnW1jVmeSe/TRD4pDn6LS9keSqeLpWDtZvxVNp68EYeqgJ+++LC yFENg4HAZYWKVNSJX9Koa1+x3Hth2F27ZiapUrhLxAg/ghMuU2DACD65ZZ8l0eykuw/UI3fQt4y 95SCK8xDfpXrIcFw+bMELIwf1S8iBtwsHToFUGmuX9BgJ/nO2vguDOzrAiv1rP2bIpWdzk+z3K3 sLbWo/yXPZx6k+eNyu+PkMLIIh0DB+OwGBA8IH1piojdoCV84hccV1IRNTFKNImdec5H1VZpCmH Q/uyipy/+1oEhRpy8RhR3E65FETqdZJWnO7YJLPhmwLkn1Ryh5AwLCRo0KfvERWiMnPMYVLJn7U +Yrs30jHSlgyrcCZMhwKrhhOAqiS5WQIfB7I1UUg== X-Received: by 2002:a17:90b:1b4d:b0:359:8df1:8553 with SMTP id 98e67ed59e1d1-359f0286267mr1489731a91.9.1773112384931; Mon, 09 Mar 2026 20:13:04 -0700 (PDT) Received: from localhost.localdomain ([147.136.157.0]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-359bcc28f0fsm5169284a91.13.2026.03.09.20.13.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 20:13:03 -0700 (PDT) From: Haifeng Xu To: akpm@linux-foundation.org, david@fromorbit.com, roman.gushchin@linux.dev Cc: zhengqi.arch@bytedance.com, muchun.song@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Haifeng Xu Subject: [PATCH V2 2/4] mm: shrinker: move shrinker_id() code block below memcg_kmem_online() Date: Tue, 10 Mar 2026 11:12:48 +0800 Message-ID: <20260310031250.289851-3-haifeng.xu@shopee.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260310031250.289851-1-haifeng.xu@shopee.com> References: <20260310031250.289851-1-haifeng.xu@shopee.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The following patch will use memcg_kmem_online() to decide the id of shrinker, so move the code block down to reduce the diff noise in the following patch. No functional change here. Signed-off-by: Haifeng Xu --- include/linux/memcontrol.h | 188 ++++++++++++++++++------------------- 1 file changed, 94 insertions(+), 94 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index a583dbc0adcc..ce7b5101bc02 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1582,100 +1582,6 @@ static inline void mem_cgroup_flush_foreign(struct = bdi_writeback *wb) =20 #endif /* CONFIG_CGROUP_WRITEBACK */ =20 -struct sock; -#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); - -#if BITS_PER_LONG < 64 -static inline void mem_cgroup_set_socket_pressure(struct mem_cgroup *memcg) -{ - u64 val =3D get_jiffies_64() + HZ; - unsigned long flags; - - write_seqlock_irqsave(&memcg->socket_pressure_seqlock, flags); - memcg->socket_pressure =3D val; - write_sequnlock_irqrestore(&memcg->socket_pressure_seqlock, flags); -} - -static inline u64 mem_cgroup_get_socket_pressure(struct mem_cgroup *memcg) -{ - unsigned int seq; - u64 val; - - do { - seq =3D read_seqbegin(&memcg->socket_pressure_seqlock); - val =3D memcg->socket_pressure; - } while (read_seqretry(&memcg->socket_pressure_seqlock, seq)); - - return val; -} -#else -static inline void mem_cgroup_set_socket_pressure(struct mem_cgroup *memcg) -{ - WRITE_ONCE(memcg->socket_pressure, jiffies + HZ); -} - -static inline u64 mem_cgroup_get_socket_pressure(struct mem_cgroup *memcg) -{ - return READ_ONCE(memcg->socket_pressure); -} -#endif - -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); -void reparent_shrinker_deferred(struct mem_cgroup *memcg); - -static inline int shrinker_id(struct mem_cgroup *memcg, struct shrinker *s= hrinker) -{ - return shrinker->id; -} -#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_inherit(const struct sock *sk, struct soc= k *newsk) -{ -} - -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 void set_shrinker_bit(struct mem_cgroup *memcg, - int nid, int shrinker_id) -{ -} - -static inline int shrinker_id(struct mem_cgroup *memcg, struct shrinker *s= hrinker) -{ - return -1; -} -#endif - #ifdef CONFIG_MEMCG bool mem_cgroup_kmem_disabled(void); int __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order); @@ -1844,6 +1750,100 @@ static inline bool memcg_is_dying(struct mem_cgroup= *memcg) } #endif /* CONFIG_MEMCG */ =20 +struct sock; +#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); + +#if BITS_PER_LONG < 64 +static inline void mem_cgroup_set_socket_pressure(struct mem_cgroup *memcg) +{ + u64 val =3D get_jiffies_64() + HZ; + unsigned long flags; + + write_seqlock_irqsave(&memcg->socket_pressure_seqlock, flags); + memcg->socket_pressure =3D val; + write_sequnlock_irqrestore(&memcg->socket_pressure_seqlock, flags); +} + +static inline u64 mem_cgroup_get_socket_pressure(struct mem_cgroup *memcg) +{ + unsigned int seq; + u64 val; + + do { + seq =3D read_seqbegin(&memcg->socket_pressure_seqlock); + val =3D memcg->socket_pressure; + } while (read_seqretry(&memcg->socket_pressure_seqlock, seq)); + + return val; +} +#else +static inline void mem_cgroup_set_socket_pressure(struct mem_cgroup *memcg) +{ + WRITE_ONCE(memcg->socket_pressure, jiffies + HZ); +} + +static inline u64 mem_cgroup_get_socket_pressure(struct mem_cgroup *memcg) +{ + return READ_ONCE(memcg->socket_pressure); +} +#endif + +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); +void reparent_shrinker_deferred(struct mem_cgroup *memcg); + +static inline int shrinker_id(struct mem_cgroup *memcg, struct shrinker *s= hrinker) +{ + return shrinker->id; +} +#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_inherit(const struct sock *sk, struct soc= k *newsk) +{ +} + +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 void set_shrinker_bit(struct mem_cgroup *memcg, + int nid, int shrinker_id) +{ +} + +static inline int shrinker_id(struct mem_cgroup *memcg, struct shrinker *s= hrinker) +{ + return -1; +} +#endif + #if defined(CONFIG_MEMCG) && defined(CONFIG_ZSWAP) bool obj_cgroup_may_zswap(struct obj_cgroup *objcg); void obj_cgroup_charge_zswap(struct obj_cgroup *objcg, size_t size); --=20 2.43.0 From nobody Thu Apr 9 08:10:44 2026 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) (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 4CD203C1972 for ; Tue, 10 Mar 2026 03:13:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773112390; cv=none; b=ohYKSHoB1as13yLVYPZiltTW0vJsJsqkloeTfqQhTY4pZEcmm3szxAZj9q2SNhkQMJ1Tg5PsQ4IKnA7QGMHqn630duI5f5xR8tmpYnV3AGEpsepDbrtWb6mrUdDDM3ndxySB+hQASVbbiScRvR2cKldOCiaw/CfGoB874/sUIkc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773112390; c=relaxed/simple; bh=G0Ce+PrLt6SRJYkiFlqj56QGbKa64kItBOb0NiRzUa8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=APLcEVMc6DZvEIkVese0BwXNmIgb+Gxb09HxKfGJ73UGWs+6zU/G6mTR53SgxjMxR/rl6Nz4mjnbcbhPwdbyAw4WXXBSmnT4nHfd8FK0ef7Tifq07V6NosRTWcqI9rbXhGzyuEDyt2yXeSx1UVApzWRR9FZT0kk/nq2V2KeYkg4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=shopee.com; spf=pass smtp.mailfrom=shopee.com; dkim=pass (2048-bit key) header.d=shopee.com header.i=@shopee.com header.b=GjTLjh4U; arc=none smtp.client-ip=209.85.216.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=shopee.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=shopee.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=shopee.com header.i=@shopee.com header.b="GjTLjh4U" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-359a5d8b3f8so4000668a91.3 for ; Mon, 09 Mar 2026 20:13:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shopee.com; s=shopee.com; t=1773112388; x=1773717188; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wsmX9IqTgTtiIKR5iSvwZiEzuk2SZ9FYiHutnUA3cX0=; b=GjTLjh4Um0Ggk8oQWeFUmsWqDVZTUX1I5NP3i3hMnVe2fRQaQeVsSIhFhF9R0zlH5+ sDCxN7MY0PSUBdN3IGCwoq2iWRpJWcW1huEcnyAnTQ/fcbUzYannVL/cZpucx7Pkg7/K BDnIIFVZue1xTe0WSaH9L2HpyrXUYY71vWRjf0CDuxL9BYImklYnixCeYv8HYFbMTdyg EvHmYc33L6oHSqyp31NurUIdo/olX2VWK7f0HgGACRtGqCxjeDlYCdW/sXQTSiBcPiq7 NmbRZ8aMyqQoQqXg9NxjXCM4NCNKSIfm6B2VHeYZDy7tkaSdXm3lB6ZLk6L8YaTusNuX ETUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773112388; x=1773717188; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wsmX9IqTgTtiIKR5iSvwZiEzuk2SZ9FYiHutnUA3cX0=; b=KRIJ/bL033HuRGc/BPF6Pn7cU2VHZdtosGuch67Yq6gwAjIKu7hbR4igReBQemvAbE mlvgUNj3sMvavg34pglY3RLnQfG5OqKkNjlfp0N7odAovRJzZcPqYBPXSe2GT0VsaoSh UCyb0tJJdspqGA3RMXktG/ToE7l7PMuR23IG3TtfX2NwBwQS03aOvTCNUFwY/3iJQ31h oXLFT3BWWmM/QT6uS6+9QtDtwx9CKaHHSSaYtwUsts/m9dZyJ21Tdf3sk1A1miIr820d BngVHVQmJ0xOOIlp/opkVj4n33Q03fgPLBIOHX8eTbPhEN/XN1Rzov0CpQcegYUxdO1C T9CQ== X-Forwarded-Encrypted: i=1; AJvYcCU1xmzsTlB5puf5AR/dkEoJrSP/OlBsRTw+XMK0gQb92toJN5azyLuXb/Oo4oajPCE+GPhVFMkZxdt5S2A=@vger.kernel.org X-Gm-Message-State: AOJu0Yzyx7qEm+Zc5A6slH1dvQT/WdXBM2T8zrsZXgC72BZPFWHAu4LA 1rwzgAqSjLt6FuYx6993IWasiUJBCucjlRO6DpezxheVNLgZsYa8d7dtSXjx1ZHUxjY= X-Gm-Gg: ATEYQzzpGm6XV3WUEqkWNQCyFdOoSIlOnIVsLpdxFoXV5llT056JAS0IBKp/IEl80hP YQhNxji7ovbSVaRSBcFBmgbprRfjquiAoYtDzhaqSHgZomcQhnFK7MZvI48NxJwDJKUSWYIHUGc W7Ae9Sx98qvxuPxhdcrjCmSxCzjlPD+ZhGOarzfiOhOFiSJZKzG/j/7dnX7WLnmcbGq5xYRVpb8 O2CJvrRYMNidEsd+OOwBIgJVtiz2yvOgdsXpPeyEIH+QfYoOTAbJ6TZuRECG6yuT5NQLOl8WZEm /AG6ctgo0bTJArHeMfUpr2pfkxnpS1e0ywjwSyK87PerVEjkJuafHjFUpidr3Ezm13dK8G809u8 +oWg4YjVzvbqpJlBA3TeNlKPjfs3rIyGLG/d2hJ/BWs1U86dStYx+sIKaHNkUNeOph1H7JtwLhk km5FDjvbRA8vetCpP7bpLHa9RCGewKsIzeP3TvpCd0T/1DsOvF X-Received: by 2002:a17:90b:2604:b0:359:92b5:da70 with SMTP id 98e67ed59e1d1-359be2725f4mr11208013a91.9.1773112388515; Mon, 09 Mar 2026 20:13:08 -0700 (PDT) Received: from localhost.localdomain ([147.136.157.0]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-359bcc28f0fsm5169284a91.13.2026.03.09.20.13.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 20:13:08 -0700 (PDT) From: Haifeng Xu To: akpm@linux-foundation.org, david@fromorbit.com, roman.gushchin@linux.dev Cc: zhengqi.arch@bytedance.com, muchun.song@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Haifeng Xu Subject: [PATCH V2 3/4] mm: shrinker: optimize the allocation of shrinker_info when setting cgroup_memory_nokmem Date: Tue, 10 Mar 2026 11:12:49 +0800 Message-ID: <20260310031250.289851-4-haifeng.xu@shopee.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260310031250.289851-1-haifeng.xu@shopee.com> References: <20260310031250.289851-1-haifeng.xu@shopee.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When kmem is disabled, memcg slab shrink only call non-slab shrinkers, so just allocates shrinker info for non-slab shrinkers to non-root memcgs. Therefore, if memcg_kmem_online is true, all things keep same as before. Otherwise, root memcg allocates id from shrinker_idr to identify each shrinker and non-root memcgs use nonslab_id to identify non-slab shrinkers. The size of shrinkers_info in non-root memcgs can be very low because the number of shrinkers marked as SHRINKER_NONSLAB | SHRINKER_MEMCG_AWARE is few. Also, the time spending in expand_shrinker_info() can reduce a lot. When setting shrinker bit or updating nr_deferred, use nonslab_id for non-root memcgs if the shrinker is marked as SHRINKER_NONSLAB. Signed-off-by: Haifeng Xu --- include/linux/memcontrol.h | 8 ++- include/linux/shrinker.h | 3 + mm/shrinker.c | 116 +++++++++++++++++++++++++++++++++---- 3 files changed, 114 insertions(+), 13 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index ce7b5101bc02..3edd6211aed2 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1804,7 +1804,13 @@ void reparent_shrinker_deferred(struct mem_cgroup *m= emcg); =20 static inline int shrinker_id(struct mem_cgroup *memcg, struct shrinker *s= hrinker) { - return shrinker->id; + int id =3D shrinker->id; + + if (!memcg_kmem_online() && (shrinker->flags & SHRINKER_NONSLAB) && + memcg !=3D root_mem_cgroup) + id =3D shrinker->nonslab_id; + + return id; } #else #define mem_cgroup_sockets_enabled 0 diff --git a/include/linux/shrinker.h b/include/linux/shrinker.h index 1a00be90d93a..df53008ed8b5 100644 --- a/include/linux/shrinker.h +++ b/include/linux/shrinker.h @@ -107,6 +107,9 @@ struct shrinker { #ifdef CONFIG_MEMCG /* ID in shrinker_idr */ int id; + + /* ID in shrinker_nonslab_idr */ + int nonslab_id; #endif #ifdef CONFIG_SHRINKER_DEBUG int debugfs_id; diff --git a/mm/shrinker.c b/mm/shrinker.c index 61dbb6afae52..68ea2d49495c 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -12,6 +12,7 @@ DEFINE_MUTEX(shrinker_mutex); =20 #ifdef CONFIG_MEMCG static int shrinker_nr_max; +static int shrinker_nonslab_nr_max; =20 static inline int shrinker_unit_size(int nr_items) { @@ -78,15 +79,25 @@ int alloc_shrinker_info(struct mem_cgroup *memcg) { int nid, ret =3D 0; int array_size =3D 0; + int alloc_nr_max; + + if (memcg_kmem_online()) { + alloc_nr_max =3D shrinker_nr_max; + } else { + if (memcg =3D=3D root_mem_cgroup) + alloc_nr_max =3D shrinker_nr_max; + else + alloc_nr_max =3D shrinker_nonslab_nr_max; + } =20 mutex_lock(&shrinker_mutex); - array_size =3D shrinker_unit_size(shrinker_nr_max); + array_size =3D shrinker_unit_size(alloc_nr_max); for_each_node(nid) { struct shrinker_info *info =3D kvzalloc_node(sizeof(*info) + array_size, GFP_KERNEL, nid); if (!info) goto err; - info->map_nr_max =3D shrinker_nr_max; + info->map_nr_max =3D alloc_nr_max; if (shrinker_unit_alloc(info, NULL, nid)) { kvfree(info); goto err; @@ -147,33 +158,47 @@ static int expand_one_shrinker_info(struct mem_cgroup= *memcg, int new_size, return 0; } =20 -static int expand_shrinker_info(int new_id) +static int expand_shrinker_info(int new_id, bool full, bool root) { int ret =3D 0; int new_nr_max =3D round_up(new_id + 1, SHRINKER_UNIT_BITS); int new_size, old_size =3D 0; struct mem_cgroup *memcg; + struct mem_cgroup *start =3D NULL; + int old_nr_max =3D shrinker_nr_max; =20 if (!root_mem_cgroup) goto out; =20 lockdep_assert_held(&shrinker_mutex); =20 + if (!full && !root) { + start =3D root_mem_cgroup; + old_nr_max =3D shrinker_nonslab_nr_max; + } + new_size =3D shrinker_unit_size(new_nr_max); - old_size =3D shrinker_unit_size(shrinker_nr_max); + old_size =3D shrinker_unit_size(old_nr_max); + + memcg =3D mem_cgroup_iter(NULL, start, NULL); + if (!memcg) + goto out; =20 - memcg =3D mem_cgroup_iter(NULL, NULL, NULL); do { ret =3D expand_one_shrinker_info(memcg, new_size, old_size, new_nr_max); - if (ret) { + if (ret || (root && memcg =3D=3D root_mem_cgroup)) { mem_cgroup_iter_break(NULL, memcg); goto out; } } while ((memcg =3D mem_cgroup_iter(NULL, memcg, NULL)) !=3D NULL); out: - if (!ret) - shrinker_nr_max =3D new_nr_max; + if (!ret) { + if (!full && !root) + shrinker_nonslab_nr_max =3D new_nr_max; + else + shrinker_nr_max =3D new_nr_max; + } =20 return ret; } @@ -212,25 +237,58 @@ void set_shrinker_bit(struct mem_cgroup *memcg, int n= id, int shrinker_id) } =20 static DEFINE_IDR(shrinker_idr); +static DEFINE_IDR(shrinker_nonslab_idr); =20 static int shrinker_memcg_alloc(struct shrinker *shrinker) { int id, ret =3D -ENOMEM; + bool kmem_online; =20 if (mem_cgroup_disabled()) return -ENOSYS; =20 + kmem_online =3D memcg_kmem_online(); mutex_lock(&shrinker_mutex); id =3D idr_alloc(&shrinker_idr, shrinker, 0, 0, GFP_KERNEL); if (id < 0) goto unlock; =20 if (id >=3D shrinker_nr_max) { - if (expand_shrinker_info(id)) { + /* If memcg_kmem_online() returns true, expand shrinker + * info for all memcgs, otherwise, expand shrinker info + * for root memcg only + */ + if (expand_shrinker_info(id, kmem_online, !kmem_online)) { + idr_remove(&shrinker_idr, id); + goto unlock; + } + } + + shrinker->nonslab_id =3D -1; + /* + * If cgroup_memory_nokmem is set, record shrinkers with SHRINKER_NONSLAB + * because memcg slab shrink only call non-slab shrinkers. + */ + if (!kmem_online && shrinker->flags & SHRINKER_NONSLAB) { + int nonslab_id; + + nonslab_id =3D idr_alloc(&shrinker_nonslab_idr, shrinker, 0, 0, GFP_KERN= EL); + if (nonslab_id < 0) { idr_remove(&shrinker_idr, id); goto unlock; } + + if (nonslab_id >=3D shrinker_nonslab_nr_max) { + /* expand shrinker info for non-root memcgs */ + if (expand_shrinker_info(nonslab_id, false, false)) { + idr_remove(&shrinker_idr, id); + idr_remove(&shrinker_nonslab_idr, nonslab_id); + goto unlock; + } + } + shrinker->nonslab_id =3D nonslab_id; } + shrinker->id =3D id; ret =3D 0; unlock: @@ -247,6 +305,12 @@ static void shrinker_memcg_remove(struct shrinker *shr= inker) lockdep_assert_held(&shrinker_mutex); =20 idr_remove(&shrinker_idr, id); + + if (shrinker->flags & SHRINKER_NONSLAB) { + id =3D shrinker->nonslab_id; + if (id >=3D 0) + idr_remove(&shrinker_nonslab_idr, id); + } } =20 static long xchg_nr_deferred_memcg(int nid, struct shrinker *shrinker, @@ -305,10 +369,33 @@ void reparent_shrinker_deferred(struct mem_cgroup *me= mcg) parent_info =3D shrinker_info_protected(parent, nid); for (index =3D 0; index < shrinker_id_to_index(child_info->map_nr_max); = index++) { child_unit =3D child_info->unit[index]; - parent_unit =3D parent_info->unit[index]; for (offset =3D 0; offset < SHRINKER_UNIT_BITS; offset++) { nr =3D atomic_long_read(&child_unit->nr_deferred[offset]); - atomic_long_add(nr, &parent_unit->nr_deferred[offset]); + + /* + * If memcg_kmem_online() is false, the non-root memcgs use + * nonslab_id but root memory cgroup use id. When reparenting + * shrinker info to it, must convert the nonslab_id to id. + */ + if (!memcg_kmem_online() && parent =3D=3D root_mem_cgroup) { + int id, p_index, p_off; + struct shrinker *shrinker; + + id =3D calc_shrinker_id(index, offset); + shrinker =3D idr_find(&shrinker_nonslab_idr, id); + if (shrinker) { + id =3D shrinker->id; + p_index =3D shrinker_id_to_index(id); + p_off =3D shrinker_id_to_offset(id); + + parent_unit =3D parent_info->unit[p_index]; + atomic_long_add(nr, + &parent_unit->nr_deferred[p_off]); + } + } else { + parent_unit =3D parent_info->unit[index]; + atomic_long_add(nr, &parent_unit->nr_deferred[offset]); + } } } } @@ -538,7 +625,12 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask,= int nid, int shrinker_id =3D calc_shrinker_id(index, offset); =20 rcu_read_lock(); - shrinker =3D idr_find(&shrinker_idr, shrinker_id); + + if (memcg_kmem_online()) + shrinker =3D idr_find(&shrinker_idr, shrinker_id); + else + shrinker =3D idr_find(&shrinker_nonslab_idr, shrinker_id); + if (unlikely(!shrinker || !shrinker_try_get(shrinker))) { clear_bit(offset, unit->map); rcu_read_unlock(); --=20 2.43.0 From nobody Thu Apr 9 08:10:44 2026 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (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 9EBD03BD623 for ; Tue, 10 Mar 2026 03:13:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773112393; cv=none; b=bVaFLZ1gFLqCMlwv1Ob51afHAzhj9RELzdw4F3K+z3CpcFw0d6RrSNhTS80sfXWDu95FM9cTsJZB04vVKSymA9xfXH4StpGexNgTOE70ioA5qerZWPGLKBhRREfAuAqUpsDOSxg0JhtqlqDGDVuruL9JfaRrqhG2OtmdSTzq/x0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773112393; c=relaxed/simple; bh=DchNTCcV/J1OJKE8U3GpYi/oQruQSSHmpV6QjmrS2Lc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uojc+oGjUAHXlxk8OmxL7cVcgG65v+4VcaXbc4pTujm4GNGHwnSo3Ug3yOyqxPHewOEYy1FGYXIqfZq8lqN0LzD+HzVX6iaPDuursmepjSKnMFomgjtEQgODEUX6V3V+TD7m0KgD9hnnNpT4BMyQ7MDyewPg+euswm0dfqPklQQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=shopee.com; spf=pass smtp.mailfrom=shopee.com; dkim=pass (2048-bit key) header.d=shopee.com header.i=@shopee.com header.b=fJGgZUJ6; arc=none smtp.client-ip=209.85.216.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=shopee.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=shopee.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=shopee.com header.i=@shopee.com header.b="fJGgZUJ6" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-3597b474cbdso5376843a91.1 for ; Mon, 09 Mar 2026 20:13:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=shopee.com; s=shopee.com; t=1773112392; x=1773717192; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Qn1NnWxqZ5SAV3ch/T7Tvbu9YC97L1KzKClE5EEgxDo=; b=fJGgZUJ6mHnS79y8qG7SWLyCTy9BOis0GJNAgEz48K8Yy3ILARyOuxoyOMg15LnYvt oEgvQqgBNp6/TbWszBKu4MebVrwyMeD274/k0uVHflv7Dednie1aqJ1LYTNHWbmGG+Ox HzGZQq+wKzwudDchyYhGd3LV9dwptmUk7A8a8rw/oABKQMt49eGp4Ie+tWBWBn5FutUD F4R/iCs2Qr1+fRHNKiFy+o32enQX/kpyKTv9Ht6in8D9k5oXJKck7cRvrVpcCXhraMTT hNrN2qH6Gj39N62GMqLNBCu6VGz0nH+jWwRDiXOsBBVkhwVSBkhi8uwwWmEBIN37dtVq qJwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773112392; x=1773717192; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Qn1NnWxqZ5SAV3ch/T7Tvbu9YC97L1KzKClE5EEgxDo=; b=vFf9rarh1mSF9Ssuc/SWelVzlQ1DXtDMLmrJwRMdTuxPaBPVBDp7pdJXsVsEKTUPeY JnjRtJa1oI4vNLqPlMXFnrGIQbfkeENAVJ0/BD1Sy+bU08mrpiIdZ7nOAZeLqZ9pw3pH zSOg6Xcxgz97uU6r+CPfh4j602l9QssS87PbrZovCbVyQnhmKpCqMkDz/FjyWj6qRFtw OdQIVNoHku0B7hcxkk9YapK6/cjgcWR1JAIU5p1kuH6acvRuZwNWUcr0/JARCUQZWdwk Fv3ofTOXm3EKYJTozVOjVWUhiJUgXHD3BWSg81jrh5AEwAZNe53lPxbBzmkJBnWZ1SE7 mArg== X-Forwarded-Encrypted: i=1; AJvYcCUJ9sT+o1TKv/wvdi1mDTXpZJLUnFSWpca9mgP7+fG/e7XBvMLw8CG9mMwYM5EHqNaCjVkRt6ZlrBzsNx4=@vger.kernel.org X-Gm-Message-State: AOJu0YyBrlLnPjkoGhHuI1dD5A6PIOWwLhFO6wA1FCHt7F19wxT01U6P aOjWhpvg8nRxbotHp7SUdB21Kfc+yawydUym/VqNTa3dz5/119qVzEJc68Jb47Wjje0= X-Gm-Gg: ATEYQzyvF7NKgGy9ZDRf0WPrZtBMtSb3dMYn7bjRzdtCNr98awEREpTM8WKGfmVBFlO BiClEdtxYqpsyFVZI/paJOae9ssHcNPsyjIbCYV8P1xY121cWZyBHRUdaSLK0QUl6ylehvi2xAs cow4oP3rploBuSYT7WVTkGI1KqXnM1hLmrl4t0tqLfVaCsGPtwYA2JlpjT1bc6IFmn1fqfJYfV6 cfPXsQYfWwYAMFkoIhnbeD4WE9TuwraX3YvTfmLj9EtRXIuHt52ggCTxkewYyfBzKv/TPCmJ669 gaLzonz3i95K3Xv2l2xS1c7fp9wFHk0W31ZJlaaH5TmO5i8ncEazJ07hLTi9TgMuHIxhxMjEmYK +fn48yQ9Am0Hiv4d/T2oOUGK7LeilI97tC0W5uKcrg55+3TfVewu5yOvT16g47TXWlJ4zwPaa2a 2oUI+mfYkaMEq6+uFRBzVVat+K2T1K6ycW70CY6w== X-Received: by 2002:a17:90b:4c09:b0:359:97d3:5c57 with SMTP id 98e67ed59e1d1-359be34986emr12179522a91.19.1773112392014; Mon, 09 Mar 2026 20:13:12 -0700 (PDT) Received: from localhost.localdomain ([147.136.157.0]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-359bcc28f0fsm5169284a91.13.2026.03.09.20.13.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Mar 2026 20:13:11 -0700 (PDT) From: Haifeng Xu To: akpm@linux-foundation.org, david@fromorbit.com, roman.gushchin@linux.dev Cc: zhengqi.arch@bytedance.com, muchun.song@linux.dev, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Haifeng Xu Subject: [PATCH V2 4/4] mm: shrinker: remove unnecessary check in shrink_slab_memcg() Date: Tue, 10 Mar 2026 11:12:50 +0800 Message-ID: <20260310031250.289851-5-haifeng.xu@shopee.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260310031250.289851-1-haifeng.xu@shopee.com> References: <20260310031250.289851-1-haifeng.xu@shopee.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If memcg_kmem_online() is false, only non-slab shrinkers are recorded in the map, so remove the check. Signed-off-by: Haifeng Xu --- mm/shrinker.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/mm/shrinker.c b/mm/shrinker.c index 68ea2d49495c..436387b3ba24 100644 --- a/mm/shrinker.c +++ b/mm/shrinker.c @@ -638,11 +638,6 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask,= int nid, } rcu_read_unlock(); =20 - /* Call non-slab shrinkers even though kmem is disabled */ - if (!memcg_kmem_online() && - !(shrinker->flags & SHRINKER_NONSLAB)) - continue; - ret =3D do_shrink_slab(&sc, shrinker, priority); if (ret =3D=3D SHRINK_EMPTY) { clear_bit(offset, unit->map); --=20 2.43.0