From nobody Sat Feb 7 17:55:21 2026 Received: from out-177.mta0.migadu.com (out-177.mta0.migadu.com [91.218.175.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71B932222A0 for ; Thu, 25 Dec 2025 23:21:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704890; cv=none; b=OV8jCVUprveIsXWvnRU0jRnJDMOOI9dUIkbG8zX5G1YwBL5h2J+jliX6Ld/uRe9/IXVdLF/Xech6QF+v6tTz1+FBKFbXZ2BGYn8YIp9PpwKxGHMOOCw7eyoztlQ1wgcrd9dpunnOQb7yLS36fflF5anDOxN+sdTr8IFxI4phq54= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704890; c=relaxed/simple; bh=Z78CT7pZRDzPjrV0Efox5bZ5O9W9O8EU2fUJBGF9Txc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Pvzzkhoil1jLWj32iMHxqs5BHliDjSmIpkY6BlHHDj+TyRufuwLpFL8xMFt3aA69dvuCQwOqRNCLzHP3TvQvzt2x8WJ/74eGitkRLH2ibcsNgTrR7Xv7HM49vf4GziwyvJJxp2d3MGRfPpfMd2kK4qdk+RaK2jpT9JIzNSjhHkA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=Ts2+6/GS; arc=none smtp.client-ip=91.218.175.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="Ts2+6/GS" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1766704886; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jMuFk6SfrgNzCfHXzFMzuHFFLdc/IVuMulpjk+slEIw=; b=Ts2+6/GSboekRiPCAzSPqJM51w0dkzINhL4AEp3Y0ZdIiFQr5faOs8mLDPxBm0YlkTSu82 AKbkZZdps4L0IZ3+v6hIljdvEdWHg6cs+xJQHEsFX6HLblSBVQ9H6XIHWB5U8qvTfZsdru YBUVdLBgtZ+jO2cIZJBQsCYlbysWSzw= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , SeongJae Park , Meta kernel team , linux-mm@kvack.org, cgroups@vger.kernel.org, damon@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 1/8] memcg: introduce private id API for in-kernel users Date: Thu, 25 Dec 2025 15:21:09 -0800 Message-ID: <20251225232116.294540-2-shakeel.butt@linux.dev> In-Reply-To: <20251225232116.294540-1-shakeel.butt@linux.dev> References: <20251225232116.294540-1-shakeel.butt@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" The memory cgroup maintains a private ID infrastructure decoupled from the cgroup IDs for swapout records and shadow entries. The main motivation of this private ID infra is best described in the commit 73f576c04b941 ("mm: memcontrol: fix cgroup creation failure after many small jobs"). Unfortunetely some users have started exposing these private IDs to the userspace where they should have used the cgroup IDs which are already exposed to the userspace. Let's rename the memcg ID APIs to explicitly mark them private. No functional change is intended. Signed-off-by: Shakeel Butt Acked-by: Michal Hocko --- include/linux/memcontrol.h | 24 ++++++++++++++--- mm/list_lru.c | 2 +- mm/memcontrol-v1.c | 6 ++--- mm/memcontrol-v1.h | 4 +-- mm/memcontrol.c | 55 +++++++++++++++++++++----------------- mm/workingset.c | 8 +++--- 6 files changed, 61 insertions(+), 38 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index fd400082313a..1c4224bcfb23 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -65,7 +65,7 @@ struct mem_cgroup_reclaim_cookie { =20 #define MEM_CGROUP_ID_SHIFT 16 =20 -struct mem_cgroup_id { +struct mem_cgroup_private_id { int id; refcount_t ref; }; @@ -191,7 +191,7 @@ struct mem_cgroup { struct cgroup_subsys_state css; =20 /* Private memcg ID. Used to ID objects that outlive the cgroup */ - struct mem_cgroup_id id; + struct mem_cgroup_private_id id; =20 /* Accounted resources */ struct page_counter memory; /* Both v1 & v2 */ @@ -821,13 +821,19 @@ void mem_cgroup_iter_break(struct mem_cgroup *, struc= t mem_cgroup *); void mem_cgroup_scan_tasks(struct mem_cgroup *memcg, int (*)(struct task_struct *, void *), void *arg); =20 -static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg) +static inline unsigned short mem_cgroup_private_id(struct mem_cgroup *memc= g) { if (mem_cgroup_disabled()) return 0; =20 return memcg->id.id; } +struct mem_cgroup *mem_cgroup_from_private_id(unsigned short id); + +static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg) +{ + return mem_cgroup_private_id(memcg); +} struct mem_cgroup *mem_cgroup_from_id(unsigned short id); =20 #ifdef CONFIG_SHRINKER_DEBUG @@ -1290,6 +1296,18 @@ static inline struct mem_cgroup *mem_cgroup_from_id(= unsigned short id) return NULL; } =20 +static inline unsigned short mem_cgroup_private_id(struct mem_cgroup *memc= g) +{ + return 0; +} + +static inline struct mem_cgroup *mem_cgroup_from_private_id(unsigned short= id) +{ + WARN_ON_ONCE(id); + /* XXX: This should always return root_mem_cgroup */ + return NULL; +} + #ifdef CONFIG_SHRINKER_DEBUG static inline unsigned long mem_cgroup_ino(struct mem_cgroup *memcg) { diff --git a/mm/list_lru.c b/mm/list_lru.c index 37b642f6cbda..13b9f66d950e 100644 --- a/mm/list_lru.c +++ b/mm/list_lru.c @@ -369,7 +369,7 @@ unsigned long list_lru_walk_node(struct list_lru *lru, = int nid, =20 xa_for_each(&lru->xa, index, mlru) { rcu_read_lock(); - memcg =3D mem_cgroup_from_id(index); + memcg =3D mem_cgroup_from_private_id(index); if (!mem_cgroup_tryget(memcg)) { rcu_read_unlock(); continue; diff --git a/mm/memcontrol-v1.c b/mm/memcontrol-v1.c index 0b50cb122ff3..0e3d972fad33 100644 --- a/mm/memcontrol-v1.c +++ b/mm/memcontrol-v1.c @@ -635,14 +635,14 @@ void memcg1_swapout(struct folio *folio, swp_entry_t = entry) * have an ID allocated to it anymore, charge the closest online * ancestor for the swap instead and transfer the memory+swap charge. */ - swap_memcg =3D mem_cgroup_id_get_online(memcg); + swap_memcg =3D mem_cgroup_private_id_get_online(memcg); nr_entries =3D folio_nr_pages(folio); /* Get references for the tail pages, too */ if (nr_entries > 1) - mem_cgroup_id_get_many(swap_memcg, nr_entries - 1); + mem_cgroup_private_id_get_many(swap_memcg, nr_entries - 1); mod_memcg_state(swap_memcg, MEMCG_SWAP, nr_entries); =20 - swap_cgroup_record(folio, mem_cgroup_id(swap_memcg), entry); + swap_cgroup_record(folio, mem_cgroup_private_id(swap_memcg), entry); =20 folio_unqueue_deferred_split(folio); folio->memcg_data =3D 0; diff --git a/mm/memcontrol-v1.h b/mm/memcontrol-v1.h index e92b21af92b1..49933925b4ba 100644 --- a/mm/memcontrol-v1.h +++ b/mm/memcontrol-v1.h @@ -28,8 +28,8 @@ unsigned long memcg_events(struct mem_cgroup *memcg, int = event); unsigned long memcg_page_state_output(struct mem_cgroup *memcg, int item); int memory_stat_show(struct seq_file *m, void *v); =20 -void mem_cgroup_id_get_many(struct mem_cgroup *memcg, unsigned int n); -struct mem_cgroup *mem_cgroup_id_get_online(struct mem_cgroup *memcg); +void mem_cgroup_private_id_get_many(struct mem_cgroup *memcg, unsigned int= n); +struct mem_cgroup *mem_cgroup_private_id_get_online(struct mem_cgroup *mem= cg); =20 /* Cgroup v1-specific declarations */ #ifdef CONFIG_MEMCG_V1 diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 75fc22a33b28..25ad8433df2e 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3554,38 +3554,38 @@ static void memcg_wb_domain_size_changed(struct mem= _cgroup *memcg) */ =20 #define MEM_CGROUP_ID_MAX ((1UL << MEM_CGROUP_ID_SHIFT) - 1) -static DEFINE_XARRAY_ALLOC1(mem_cgroup_ids); +static DEFINE_XARRAY_ALLOC1(mem_cgroup_private_ids); =20 -static void mem_cgroup_id_remove(struct mem_cgroup *memcg) +static void mem_cgroup_private_id_remove(struct mem_cgroup *memcg) { if (memcg->id.id > 0) { - xa_erase(&mem_cgroup_ids, memcg->id.id); + xa_erase(&mem_cgroup_private_ids, memcg->id.id); memcg->id.id =3D 0; } } =20 -void __maybe_unused mem_cgroup_id_get_many(struct mem_cgroup *memcg, +void __maybe_unused mem_cgroup_private_id_get_many(struct mem_cgroup *memc= g, unsigned int n) { refcount_add(n, &memcg->id.ref); } =20 -static void mem_cgroup_id_put_many(struct mem_cgroup *memcg, unsigned int = n) +static void mem_cgroup_private_id_put_many(struct mem_cgroup *memcg, unsig= ned int n) { if (refcount_sub_and_test(n, &memcg->id.ref)) { - mem_cgroup_id_remove(memcg); + mem_cgroup_private_id_remove(memcg); =20 /* Memcg ID pins CSS */ css_put(&memcg->css); } } =20 -static inline void mem_cgroup_id_put(struct mem_cgroup *memcg) +static inline void mem_cgroup_private_id_put(struct mem_cgroup *memcg) { - mem_cgroup_id_put_many(memcg, 1); + mem_cgroup_private_id_put_many(memcg, 1); } =20 -struct mem_cgroup *mem_cgroup_id_get_online(struct mem_cgroup *memcg) +struct mem_cgroup *mem_cgroup_private_id_get_online(struct mem_cgroup *mem= cg) { while (!refcount_inc_not_zero(&memcg->id.ref)) { /* @@ -3604,15 +3604,20 @@ struct mem_cgroup *mem_cgroup_id_get_online(struct = mem_cgroup *memcg) } =20 /** - * mem_cgroup_from_id - look up a memcg from a memcg id + * mem_cgroup_from_private_id - look up a memcg from a memcg id * @id: the memcg id to look up * * Caller must hold rcu_read_lock(). */ -struct mem_cgroup *mem_cgroup_from_id(unsigned short id) +struct mem_cgroup *mem_cgroup_from_private_id(unsigned short id) { WARN_ON_ONCE(!rcu_read_lock_held()); - return xa_load(&mem_cgroup_ids, id); + return xa_load(&mem_cgroup_private_ids, id); +} + +struct mem_cgroup *mem_cgroup_from_id(unsigned short id) +{ + return mem_cgroup_from_private_id(id); } =20 #ifdef CONFIG_SHRINKER_DEBUG @@ -3711,7 +3716,7 @@ static struct mem_cgroup *mem_cgroup_alloc(struct mem= _cgroup *parent) if (!memcg) return ERR_PTR(-ENOMEM); =20 - error =3D xa_alloc(&mem_cgroup_ids, &memcg->id.id, NULL, + error =3D xa_alloc(&mem_cgroup_private_ids, &memcg->id.id, NULL, XA_LIMIT(1, MEM_CGROUP_ID_MAX), GFP_KERNEL); if (error) goto fail; @@ -3771,7 +3776,7 @@ static struct mem_cgroup *mem_cgroup_alloc(struct mem= _cgroup *parent) lru_gen_init_memcg(memcg); return memcg; fail: - mem_cgroup_id_remove(memcg); + mem_cgroup_private_id_remove(memcg); __mem_cgroup_free(memcg); return ERR_PTR(error); } @@ -3854,7 +3859,7 @@ static int mem_cgroup_css_online(struct cgroup_subsys= _state *css) css_get(css); =20 /* - * Ensure mem_cgroup_from_id() works once we're fully online. + * Ensure mem_cgroup_from_private_id() works once we're fully online. * * We could do this earlier and require callers to filter with * css_tryget_online(). But right now there are no users that @@ -3863,13 +3868,13 @@ static int mem_cgroup_css_online(struct cgroup_subs= ys_state *css) * publish it here at the end of onlining. This matches the * regular ID destruction during offlining. */ - xa_store(&mem_cgroup_ids, memcg->id.id, memcg, GFP_KERNEL); + xa_store(&mem_cgroup_private_ids, memcg->id.id, memcg, GFP_KERNEL); =20 return 0; offline_kmem: memcg_offline_kmem(memcg); remove_id: - mem_cgroup_id_remove(memcg); + mem_cgroup_private_id_remove(memcg); return -ENOMEM; } =20 @@ -3892,7 +3897,7 @@ static void mem_cgroup_css_offline(struct cgroup_subs= ys_state *css) =20 drain_all_stock(memcg); =20 - mem_cgroup_id_put(memcg); + mem_cgroup_private_id_put(memcg); } =20 static void mem_cgroup_css_released(struct cgroup_subsys_state *css) @@ -4779,7 +4784,7 @@ int mem_cgroup_swapin_charge_folio(struct folio *foli= o, struct mm_struct *mm, =20 id =3D lookup_swap_cgroup_id(entry); rcu_read_lock(); - memcg =3D mem_cgroup_from_id(id); + memcg =3D mem_cgroup_from_private_id(id); if (!memcg || !css_tryget_online(&memcg->css)) memcg =3D get_mem_cgroup_from_mm(mm); rcu_read_unlock(); @@ -5174,22 +5179,22 @@ int __mem_cgroup_try_charge_swap(struct folio *foli= o, swp_entry_t entry) return 0; } =20 - memcg =3D mem_cgroup_id_get_online(memcg); + memcg =3D mem_cgroup_private_id_get_online(memcg); =20 if (!mem_cgroup_is_root(memcg) && !page_counter_try_charge(&memcg->swap, nr_pages, &counter)) { memcg_memory_event(memcg, MEMCG_SWAP_MAX); memcg_memory_event(memcg, MEMCG_SWAP_FAIL); - mem_cgroup_id_put(memcg); + mem_cgroup_private_id_put(memcg); return -ENOMEM; } =20 /* Get references for the tail pages, too */ if (nr_pages > 1) - mem_cgroup_id_get_many(memcg, nr_pages - 1); + mem_cgroup_private_id_get_many(memcg, nr_pages - 1); mod_memcg_state(memcg, MEMCG_SWAP, nr_pages); =20 - swap_cgroup_record(folio, mem_cgroup_id(memcg), entry); + swap_cgroup_record(folio, mem_cgroup_private_id(memcg), entry); =20 return 0; } @@ -5206,7 +5211,7 @@ void __mem_cgroup_uncharge_swap(swp_entry_t entry, un= signed int nr_pages) =20 id =3D swap_cgroup_clear(entry, nr_pages); rcu_read_lock(); - memcg =3D mem_cgroup_from_id(id); + memcg =3D mem_cgroup_from_private_id(id); if (memcg) { if (!mem_cgroup_is_root(memcg)) { if (do_memsw_account()) @@ -5215,7 +5220,7 @@ void __mem_cgroup_uncharge_swap(swp_entry_t entry, un= signed int nr_pages) page_counter_uncharge(&memcg->swap, nr_pages); } mod_memcg_state(memcg, MEMCG_SWAP, -nr_pages); - mem_cgroup_id_put_many(memcg, nr_pages); + mem_cgroup_private_id_put_many(memcg, nr_pages); } rcu_read_unlock(); } diff --git a/mm/workingset.c b/mm/workingset.c index e9f05634747a..13422d304715 100644 --- a/mm/workingset.c +++ b/mm/workingset.c @@ -254,7 +254,7 @@ static void *lru_gen_eviction(struct folio *folio) hist =3D lru_hist_from_seq(min_seq); atomic_long_add(delta, &lrugen->evicted[hist][type][tier]); =20 - return pack_shadow(mem_cgroup_id(memcg), pgdat, token, workingset); + return pack_shadow(mem_cgroup_private_id(memcg), pgdat, token, workingset= ); } =20 /* @@ -271,7 +271,7 @@ static bool lru_gen_test_recent(void *shadow, struct lr= uvec **lruvec, =20 unpack_shadow(shadow, &memcg_id, &pgdat, token, workingset); =20 - memcg =3D mem_cgroup_from_id(memcg_id); + memcg =3D mem_cgroup_from_private_id(memcg_id); *lruvec =3D mem_cgroup_lruvec(memcg, pgdat); =20 max_seq =3D READ_ONCE((*lruvec)->lrugen.max_seq); @@ -395,7 +395,7 @@ void *workingset_eviction(struct folio *folio, struct m= em_cgroup *target_memcg) =20 lruvec =3D mem_cgroup_lruvec(target_memcg, pgdat); /* XXX: target_memcg can be NULL, go through lruvec */ - memcgid =3D mem_cgroup_id(lruvec_memcg(lruvec)); + memcgid =3D mem_cgroup_private_id(lruvec_memcg(lruvec)); eviction =3D atomic_long_read(&lruvec->nonresident_age); eviction >>=3D bucket_order; workingset_age_nonresident(lruvec, folio_nr_pages(folio)); @@ -456,7 +456,7 @@ bool workingset_test_recent(void *shadow, bool file, bo= ol *workingset, * would be better if the root_mem_cgroup existed in all * configurations instead. */ - eviction_memcg =3D mem_cgroup_from_id(memcgid); + eviction_memcg =3D mem_cgroup_from_private_id(memcgid); if (!mem_cgroup_tryget(eviction_memcg)) eviction_memcg =3D NULL; rcu_read_unlock(); --=20 2.47.3 From nobody Sat Feb 7 17:55:21 2026 Received: from out-177.mta1.migadu.com (out-177.mta1.migadu.com [95.215.58.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 545F71DF736 for ; Thu, 25 Dec 2025 23:21:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704909; cv=none; b=Slc6yHWDEfWRJdE74vmnihZ/i7A/7pJ8yyll3BF/aQMFyP2DOWnSsAgzYOL93j0Iwxoy8yI7EhjvI3f434EZ2fcuQBRht9UonFMCt2N1Ar7v6JB3iMMEk1+lBHhxCxYe23QBPDxttM1b8Gvuor7Ju7EtmKqK536MYqFvS2hygLM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704909; c=relaxed/simple; bh=6sGApEq2wAUJdIA4naJGX1M4w9kayzWqSsFuKwnnP5A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fnD6ghacIZIpZ8aSBPPN+1RxebVg0tdpvlPYNTMaCUvmYM940gT5jYSykMT+oG3JeTYeXIg+DVhA4bdbooKvwjjQwjvxXU75Tx5PBzwBbSOODROiW8TTvMVYDLnSi0ubwMnCin6tqUcgxlTvslO0hQddL7otKvz3109ygFW9lRY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=V1Ud422M; arc=none smtp.client-ip=95.215.58.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="V1Ud422M" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1766704895; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=k0ch+6yI2tUKJ64buXx3qfBV9aEKwt068abp9sUTgOs=; b=V1Ud422Myo3TSvF6ot7WDW/igs4tzP3Spgllu6/P7t+yRgxB7sI+zS3mDjX1I21L2u889u tqjQR3Orgezg0Y9YJj/O86Yg0JdwIfK39WId2zS0EWkLKrgb9HIm3GEFOB+HcLG+3E5+Sb Gr+pB7+MPupund5xTwfR5NYHdHmprNI= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , SeongJae Park , Meta kernel team , linux-mm@kvack.org, cgroups@vger.kernel.org, damon@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 2/8] memcg: expose mem_cgroup_ino() and mem_cgroup_get_from_ino() unconditionally Date: Thu, 25 Dec 2025 15:21:10 -0800 Message-ID: <20251225232116.294540-3-shakeel.butt@linux.dev> In-Reply-To: <20251225232116.294540-1-shakeel.butt@linux.dev> References: <20251225232116.294540-1-shakeel.butt@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Remove the CONFIG_SHRINKER_DEBUG guards around mem_cgroup_ino() and mem_cgroup_get_from_ino(). These APIs provide a way to get a memcg's cgroup inode number and to look up a memcg from an inode number respectively. Making these functions unconditionally available allows other in-kernel users to leverage them without requiring CONFIG_SHRINKER_DEBUG to be enabled. No functional change for existing users. Signed-off-by: Shakeel Butt Acked-by: Michal Hocko --- include/linux/memcontrol.h | 4 ---- mm/memcontrol.c | 2 -- 2 files changed, 6 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 1c4224bcfb23..77f32be26ea8 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -836,14 +836,12 @@ static inline unsigned short mem_cgroup_id(struct mem= _cgroup *memcg) } struct mem_cgroup *mem_cgroup_from_id(unsigned short id); =20 -#ifdef CONFIG_SHRINKER_DEBUG static inline unsigned long mem_cgroup_ino(struct mem_cgroup *memcg) { return memcg ? cgroup_ino(memcg->css.cgroup) : 0; } =20 struct mem_cgroup *mem_cgroup_get_from_ino(unsigned long ino); -#endif =20 static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m) { @@ -1308,7 +1306,6 @@ static inline struct mem_cgroup *mem_cgroup_from_priv= ate_id(unsigned short id) return NULL; } =20 -#ifdef CONFIG_SHRINKER_DEBUG static inline unsigned long mem_cgroup_ino(struct mem_cgroup *memcg) { return 0; @@ -1318,7 +1315,6 @@ static inline struct mem_cgroup *mem_cgroup_get_from_= ino(unsigned long ino) { return NULL; } -#endif =20 static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m) { diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 25ad8433df2e..e85816960e38 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3620,7 +3620,6 @@ struct mem_cgroup *mem_cgroup_from_id(unsigned short = id) return mem_cgroup_from_private_id(id); } =20 -#ifdef CONFIG_SHRINKER_DEBUG struct mem_cgroup *mem_cgroup_get_from_ino(unsigned long ino) { struct cgroup *cgrp; @@ -3641,7 +3640,6 @@ struct mem_cgroup *mem_cgroup_get_from_ino(unsigned l= ong ino) =20 return memcg; } -#endif =20 static void free_mem_cgroup_per_node_info(struct mem_cgroup_per_node *pn) { --=20 2.47.3 From nobody Sat Feb 7 17:55:21 2026 Received: from out-173.mta0.migadu.com (out-173.mta0.migadu.com [91.218.175.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD0FC1DF736 for ; Thu, 25 Dec 2025 23:21:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704902; cv=none; b=WQBUF8XF50PG14JscmDuSIOv2ieDaBRqfhzv1KnwsaJC2RlX1GPvnrllViROMT1Puw2XGYcjG7dT6nC2O/mP6RNB/dZbS6njb2CF6ebxGu5ONL3ZSiWPxdRQIEKGLe+yhSqV/NbXAiojSAmSqfVWjDbtK/BA6GHK9npI0gNSKIs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704902; c=relaxed/simple; bh=eHc/9h6653MgzBLH8SGSWdotekhAKEDDGV2/8yjGhjg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r2IrAVdUqMQhmlfRyTKhDshPOMrpNzZleQBbnm3FzevRDN0HcuWB0uBucpI9pHLCbxcWIsnEhvYhLuejBxCD0S+fpHj1s63RLaXqZVlg5R/4qoNrs1g/QCxeeNsC+YG8aGcUAqCzYWrI8D13G7fgFpESGADHudhcl0I4/vwKDmA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=vbIrljY9; arc=none smtp.client-ip=91.218.175.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="vbIrljY9" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1766704898; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=HNWA2wy5x9qmESizAoWxNjF5HTjl76WyG9bV89v6wkc=; b=vbIrljY9Mm8NiHjnoyWxvDlzPBU2XDS3DgZXbUz8CnkO/r1IXynRdZ8/R1sxe1r4/n2nhn grLSA4DBmRv8k2SMke7G7nnY2fKRze3XDs+LQhTS4HCHZYnjRzuCWi6jsah7qfHMH6W3nv sqCjwirvPFv+S3Obsz/ngB7fVRGsvVw= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , SeongJae Park , Meta kernel team , linux-mm@kvack.org, cgroups@vger.kernel.org, damon@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 3/8] memcg: mem_cgroup_get_from_ino() returns NULL on error Date: Thu, 25 Dec 2025 15:21:11 -0800 Message-ID: <20251225232116.294540-4-shakeel.butt@linux.dev> In-Reply-To: <20251225232116.294540-1-shakeel.butt@linux.dev> References: <20251225232116.294540-1-shakeel.butt@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Change mem_cgroup_get_from_ino() to return NULL on error instead of ERR_PTR values. This simplifies the API: NULL indicates failure, and a valid pointer indicates success with a CSS reference held that the caller must release via mem_cgroup_put(). Signed-off-by: Shakeel Butt Acked-by: Michal Hocko --- mm/memcontrol.c | 6 ++---- mm/shrinker_debug.c | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index e85816960e38..92beb74482fa 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3624,17 +3624,15 @@ struct mem_cgroup *mem_cgroup_get_from_ino(unsigned= long ino) { struct cgroup *cgrp; struct cgroup_subsys_state *css; - struct mem_cgroup *memcg; + struct mem_cgroup *memcg =3D NULL; =20 cgrp =3D cgroup_get_from_id(ino); if (IS_ERR(cgrp)) - return ERR_CAST(cgrp); + return NULL; =20 css =3D cgroup_get_e_css(cgrp, &memory_cgrp_subsys); if (css) memcg =3D container_of(css, struct mem_cgroup, css); - else - memcg =3D ERR_PTR(-ENOENT); =20 cgroup_put(cgrp); =20 diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c index 20eaee3e97f7..8aaeb8f5c3af 100644 --- a/mm/shrinker_debug.c +++ b/mm/shrinker_debug.c @@ -130,7 +130,7 @@ static ssize_t shrinker_debugfs_scan_write(struct file = *file, =20 if (shrinker->flags & SHRINKER_MEMCG_AWARE) { memcg =3D mem_cgroup_get_from_ino(ino); - if (!memcg || IS_ERR(memcg)) + if (!memcg) return -ENOENT; =20 if (!mem_cgroup_online(memcg)) { --=20 2.47.3 From nobody Sat Feb 7 17:55:21 2026 Received: from out-174.mta1.migadu.com (out-174.mta1.migadu.com [95.215.58.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA8502C0F7C for ; Thu, 25 Dec 2025 23:21:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704915; cv=none; b=onJZENuEoPB6BW0pIo2u+kvSl4+7wnYR64krqhHo/1Ea2zpGvxQIokVnZbmdj6aXXQBGUD90sJmJb8YqUGXWuO2o4fiIfPlj0Kuk6vi+EPBL7LY/z3aQHDaNc2ahuk+RrM15MXIhX2p6FOkdEr1AiKOfwxwksH32CXzn9AjadSI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704915; c=relaxed/simple; bh=el8HAB0sOOLSau6RTNfayIxRkLKv+Hwe1XlsZYDYSnM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bwhxAq9rI2TwtIfclmA8qwQufkW5B0r6Y5O8C8M14FSniu7FJC6kh9t0BhjxUrc/lJdclMz4Aug3NtAdeXBUMVF9w/U5d8Rczy0ooScZHz2YsACQTshSTp/HFvBCFB910t5/OSrsR671hVEpJ++zffYfy9Pk+vBgGKN6jWglznY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=wylAyIn8; arc=none smtp.client-ip=95.215.58.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="wylAyIn8" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1766704909; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=WHLUPExoPKnJu0oj7221nxhPbwe4fH4Njx6PIRBvWXw=; b=wylAyIn8SEF0kBQem+PiUWjgcrj8RTvksgBmWjmdsjlPCewjVoa5/4qRUwLPRZOatWv5DT PJJCCmjYTPrTF01gdMkY9TnG6ZoaVWfWaH6T+4WDk/wsvXmE1VTbhbXqBWcdN2+nYpJN7G h8VaIoHLozD6gKU1RUvpW2Aqci9G5P4= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , SeongJae Park , Meta kernel team , linux-mm@kvack.org, cgroups@vger.kernel.org, damon@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 4/8] memcg: use cgroup_id() instead of cgroup_ino() for memcg ID Date: Thu, 25 Dec 2025 15:21:12 -0800 Message-ID: <20251225232116.294540-5-shakeel.butt@linux.dev> In-Reply-To: <20251225232116.294540-1-shakeel.butt@linux.dev> References: <20251225232116.294540-1-shakeel.butt@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Switch mem_cgroup_ino() from using cgroup_ino() to cgroup_id(). The cgroup_ino() returns the kernfs inode number while cgroup_id() returns the kernfs node ID. For 64-bit systems, they are the same. Also cgroup_get_from_id() expects 64-bit node ID which is called by mem_cgroup_get_from_ino(). Change the type from unsigned long to u64 to match cgroup_id()'s return type, and update the format specifiers accordingly. Note that the names mem_cgroup_ino() and mem_cgroup_get_from_ino() are now misnomers since they deal with cgroup IDs rather than inode numbers. A follow-up patch will rename them. Signed-off-by: Shakeel Butt Acked-by: Michal Hocko --- include/linux/memcontrol.h | 10 +++++----- mm/memcontrol.c | 2 +- mm/shrinker_debug.c | 7 ++++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 77f32be26ea8..c823150ec288 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -836,12 +836,12 @@ static inline unsigned short mem_cgroup_id(struct mem= _cgroup *memcg) } struct mem_cgroup *mem_cgroup_from_id(unsigned short id); =20 -static inline unsigned long mem_cgroup_ino(struct mem_cgroup *memcg) +static inline u64 mem_cgroup_ino(struct mem_cgroup *memcg) { - return memcg ? cgroup_ino(memcg->css.cgroup) : 0; + return memcg ? cgroup_id(memcg->css.cgroup) : 0; } =20 -struct mem_cgroup *mem_cgroup_get_from_ino(unsigned long ino); +struct mem_cgroup *mem_cgroup_get_from_ino(u64 ino); =20 static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m) { @@ -1306,12 +1306,12 @@ static inline struct mem_cgroup *mem_cgroup_from_pr= ivate_id(unsigned short id) return NULL; } =20 -static inline unsigned long mem_cgroup_ino(struct mem_cgroup *memcg) +static inline u64 mem_cgroup_ino(struct mem_cgroup *memcg) { return 0; } =20 -static inline struct mem_cgroup *mem_cgroup_get_from_ino(unsigned long ino) +static inline struct mem_cgroup *mem_cgroup_get_from_ino(u64 ino) { return NULL; } diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 92beb74482fa..1ff2f9bd820c 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3620,7 +3620,7 @@ struct mem_cgroup *mem_cgroup_from_id(unsigned short = id) return mem_cgroup_from_private_id(id); } =20 -struct mem_cgroup *mem_cgroup_get_from_ino(unsigned long ino) +struct mem_cgroup *mem_cgroup_get_from_ino(u64 ino) { struct cgroup *cgrp; struct cgroup_subsys_state *css; diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c index 8aaeb8f5c3af..7ef16a0b2959 100644 --- a/mm/shrinker_debug.c +++ b/mm/shrinker_debug.c @@ -70,7 +70,7 @@ static int shrinker_debugfs_count_show(struct seq_file *m= , void *v) memcg_aware ? memcg : NULL, count_per_node); if (total) { - seq_printf(m, "%lu", mem_cgroup_ino(memcg)); + seq_printf(m, "%llu", mem_cgroup_ino(memcg)); for_each_node(nid) seq_printf(m, " %lu", count_per_node[nid]); seq_putc(m, '\n'); @@ -106,7 +106,8 @@ static ssize_t shrinker_debugfs_scan_write(struct file = *file, size_t size, loff_t *pos) { struct shrinker *shrinker =3D file->private_data; - unsigned long nr_to_scan =3D 0, ino, read_len; + unsigned long nr_to_scan =3D 0, read_len; + u64 ino; struct shrink_control sc =3D { .gfp_mask =3D GFP_KERNEL, }; @@ -119,7 +120,7 @@ static ssize_t shrinker_debugfs_scan_write(struct file = *file, return -EFAULT; kbuf[read_len] =3D '\0'; =20 - if (sscanf(kbuf, "%lu %d %lu", &ino, &nid, &nr_to_scan) !=3D 3) + if (sscanf(kbuf, "%llu %d %lu", &ino, &nid, &nr_to_scan) !=3D 3) return -EINVAL; =20 if (nid < 0 || nid >=3D nr_node_ids) --=20 2.47.3 From nobody Sat Feb 7 17:55:21 2026 Received: from out-174.mta1.migadu.com (out-174.mta1.migadu.com [95.215.58.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C1FA12C11D6 for ; Thu, 25 Dec 2025 23:21:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704921; cv=none; b=WnoUHy9lpdBHL4HzDuuBMzxUJLvAS03UJUsNfwpmycYdMKza102W7YqaaTqB9coEm8w9H/yuUW9/bfl3IdbyPJaYwJ6u+5xxvAd5Ogs1WR31J8/0aMr8nWTvJu9lwfsgMdLoBWQpU2miP6zBSnTgsmB0nxxdRTgJ36Luhdvczj4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704921; c=relaxed/simple; bh=9D3i4WtWKzPbxlmFJZLWRQmSpACn15plQ0XMaWdeqbY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gf7WSaR4obnqD82A7pxkZdS2H/EkMASoUvAOLmzb1mi00NO5xwYK7+Df1jjtLB1FbK9MhmWnewaScvNHSwQ06LFaUHzLbHokWNFiGrZiYK7j7pwKXKjsrMJ+kQU5HxCHC+2y/1IqcQPrU4dI0rX1wGqBzezLJwXQSqZepC/1XK0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=fZjyiY2h; arc=none smtp.client-ip=95.215.58.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="fZjyiY2h" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1766704918; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qVIJLlIoVbyUjgLSsqavcZQWB6x8jtRLfTLva9jt/vw=; b=fZjyiY2hlAllu5kswXjcYSVUkUmBMWZCRsfjEqoVAjBblu5dGNfXelxww+eCnEshWI70uw b/2xwUsmF3rHJrEjUhxXwBBbuAWCNXmH26YcV+Wfwc6l2oZEEZmcISR5N+INT3oxtY27Bp vkF++kZgRyutqRzDdIJyUXsiWdhq5XQ= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , SeongJae Park , Meta kernel team , linux-mm@kvack.org, cgroups@vger.kernel.org, damon@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 5/8] mm/damon: use cgroup ID instead of private memcg ID Date: Thu, 25 Dec 2025 15:21:13 -0800 Message-ID: <20251225232116.294540-6-shakeel.butt@linux.dev> In-Reply-To: <20251225232116.294540-1-shakeel.butt@linux.dev> References: <20251225232116.294540-1-shakeel.butt@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" DAMON was using the internal private memcg ID which is meant for tracking kernel objects that outlive their cgroup. Switch to using the public cgroup ID instead. Signed-off-by: Shakeel Butt Acked-by: Michal Hocko Reviewed-by: SeongJae Park --- include/linux/damon.h | 4 ++-- mm/damon/core.c | 7 ++----- mm/damon/ops-common.c | 2 +- mm/damon/sysfs-schemes.c | 8 ++++---- 4 files changed, 9 insertions(+), 12 deletions(-) diff --git a/include/linux/damon.h b/include/linux/damon.h index a67292a2f09d..650e7ecfa32b 100644 --- a/include/linux/damon.h +++ b/include/linux/damon.h @@ -203,7 +203,7 @@ struct damos_quota_goal { u64 last_psi_total; struct { int nid; - unsigned short memcg_id; + u64 memcg_id; }; }; struct list_head list; @@ -419,7 +419,7 @@ struct damos_filter { bool matching; bool allow; union { - unsigned short memcg_id; + u64 memcg_id; struct damon_addr_range addr_range; int target_idx; struct damon_size_range sz_range; diff --git a/mm/damon/core.c b/mm/damon/core.c index 2d3e8006db50..23c44811ff7f 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -2065,16 +2065,13 @@ static unsigned long damos_get_node_memcg_used_bp( unsigned long used_pages, numerator; struct sysinfo i; =20 - rcu_read_lock(); - memcg =3D mem_cgroup_from_id(goal->memcg_id); - if (!memcg || !mem_cgroup_tryget(memcg)) { - rcu_read_unlock(); + memcg =3D mem_cgroup_get_from_ino(goal->memcg_id); + if (!memcg) { if (goal->metric =3D=3D DAMOS_QUOTA_NODE_MEMCG_USED_BP) return 0; else /* DAMOS_QUOTA_NODE_MEMCG_FREE_BP */ return 10000; } - rcu_read_unlock(); =20 mem_cgroup_flush_stats(memcg); lruvec =3D mem_cgroup_lruvec(memcg, NODE_DATA(goal->nid)); diff --git a/mm/damon/ops-common.c b/mm/damon/ops-common.c index a218d9922234..dd81db95f901 100644 --- a/mm/damon/ops-common.c +++ b/mm/damon/ops-common.c @@ -274,7 +274,7 @@ bool damos_folio_filter_match(struct damos_filter *filt= er, struct folio *folio) if (!memcg) matched =3D false; else - matched =3D filter->memcg_id =3D=3D mem_cgroup_id(memcg); + matched =3D filter->memcg_id =3D=3D mem_cgroup_ino(memcg); rcu_read_unlock(); break; case DAMOS_FILTER_TYPE_YOUNG: diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index e198234f0763..79aa917ab3c0 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -2492,7 +2492,7 @@ static bool damon_sysfs_memcg_path_eq(struct mem_cgro= up *memcg, return false; } =20 -static int damon_sysfs_memcg_path_to_id(char *memcg_path, unsigned short *= id) +static int damon_sysfs_memcg_path_to_id(char *memcg_path, u64 *id) { struct mem_cgroup *memcg; char *path; @@ -2507,11 +2507,11 @@ static int damon_sysfs_memcg_path_to_id(char *memcg= _path, unsigned short *id) =20 for (memcg =3D mem_cgroup_iter(NULL, NULL, NULL); memcg; memcg =3D mem_cgroup_iter(NULL, memcg, NULL)) { - /* skip removed memcg */ - if (!mem_cgroup_id(memcg)) + /* skip offlined memcg */ + if (!mem_cgroup_online(memcg)) continue; if (damon_sysfs_memcg_path_eq(memcg, path, memcg_path)) { - *id =3D mem_cgroup_id(memcg); + *id =3D mem_cgroup_ino(memcg); found =3D true; break; } --=20 2.47.3 From nobody Sat Feb 7 17:55:21 2026 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA6441A76DE for ; Thu, 25 Dec 2025 23:22:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704951; cv=none; b=ImH6CR30c24k7nGQxJ/wDPjmVGocKE6H0DfWuzQhc/1CiGQ/XkCgSaQ5N+EkgfsxiDiJ+Xn5/VkcvsayhX0fXkz6OTgnh2M5Gr04zbkYIHD3/SHzH/ECSPhiGFaMb5oQP+UVIIDYOl9BPX4JO7cdVTkL+KRi3WiJ7baoIWycQFM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766704951; c=relaxed/simple; bh=6tIArGlSqpof+0rDw58wC/1JKZYFEvHKklYcbVdtYO4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TIgE0jr0fdvBxHFihxYZ8Bhtv7C5zUjYLdy+C/xgxSvBB5qD8XSzfkebKpuExBHthWFOQB7zX+asI6WKFrHpqHazB/hEcQ7eR5FR/bU0d8e41OvAGdzxDZqqUSyHFu4KOGwzkOy/5Nv24NGcL0DrtqYYSOO93EZOAtKwJLdaC0k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=lpuglBuc; arc=none smtp.client-ip=95.215.58.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="lpuglBuc" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1766704948; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Emeg4oe9Wf0hyjEB6RFxn5Oy5f9oafLtHS4W3VCookU=; b=lpuglBucsWYRiDV/OnmxWeINhdtMYGc0NTEFlwikXxPSs0ejEd4LObkAP9Ac3BAHuc+Fvd Nztz/FLx82sK4xM2VUmg1+MA78XKQUDuQTQFd7WgwRQRM9JF5YL33GsHMO0B+BFsWDHuL3 ru71F8vValtJC/97v4Cc466P12Hpbzw= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , SeongJae Park , Meta kernel team , linux-mm@kvack.org, cgroups@vger.kernel.org, damon@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 6/8] mm/vmscan: use cgroup ID instead of private memcg ID in lru_gen interface Date: Thu, 25 Dec 2025 15:21:14 -0800 Message-ID: <20251225232116.294540-7-shakeel.butt@linux.dev> In-Reply-To: <20251225232116.294540-1-shakeel.butt@linux.dev> References: <20251225232116.294540-1-shakeel.butt@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" The LRU gen debugfs interface was using the internal private memcg ID which is meant for tracking kernel objects that outlive their cgroup. Switch to using the public cgroup ID instead. Signed-off-by: Shakeel Butt Acked-by: Michal Hocko --- mm/vmscan.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/mm/vmscan.c b/mm/vmscan.c index a4b308a2f9ad..d78043c7e4af 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -5426,7 +5426,7 @@ static int lru_gen_seq_show(struct seq_file *m, void = *v) if (memcg) cgroup_path(memcg->css.cgroup, m->private, PATH_MAX); #endif - seq_printf(m, "memcg %5hu %s\n", mem_cgroup_id(memcg), path); + seq_printf(m, "memcg %llu %s\n", mem_cgroup_ino(memcg), path); } =20 seq_printf(m, " node %5d\n", nid); @@ -5511,7 +5511,7 @@ static int run_eviction(struct lruvec *lruvec, unsign= ed long seq, struct scan_co return -EINTR; } =20 -static int run_cmd(char cmd, int memcg_id, int nid, unsigned long seq, +static int run_cmd(char cmd, u64 memcg_id, int nid, unsigned long seq, struct scan_control *sc, int swappiness, unsigned long opt) { struct lruvec *lruvec; @@ -5522,19 +5522,12 @@ static int run_cmd(char cmd, int memcg_id, int nid,= unsigned long seq, return -EINVAL; =20 if (!mem_cgroup_disabled()) { - rcu_read_lock(); - - memcg =3D mem_cgroup_from_id(memcg_id); - if (!mem_cgroup_tryget(memcg)) - memcg =3D NULL; - - rcu_read_unlock(); - + memcg =3D mem_cgroup_get_from_ino(memcg_id); if (!memcg) return -EINVAL; } =20 - if (memcg_id !=3D mem_cgroup_id(memcg)) + if (memcg_id !=3D mem_cgroup_ino(memcg)) goto done; =20 sc->target_mem_cgroup =3D memcg; @@ -5601,7 +5594,7 @@ static ssize_t lru_gen_seq_write(struct file *file, c= onst char __user *src, int n; int end; char cmd, swap_string[5]; - unsigned int memcg_id; + u64 memcg_id; unsigned int nid; unsigned long seq; unsigned int swappiness; @@ -5611,7 +5604,7 @@ static ssize_t lru_gen_seq_write(struct file *file, c= onst char __user *src, if (!*cur) continue; =20 - n =3D sscanf(cur, "%c %u %u %lu %n %4s %n %lu %n", &cmd, &memcg_id, &nid, + n =3D sscanf(cur, "%c %llu %u %lu %n %4s %n %lu %n", &cmd, &memcg_id, &n= id, &seq, &end, swap_string, &end, &opt, &end); if (n < 4 || cur[end]) { err =3D -EINVAL; --=20 2.47.3 From nobody Sat Feb 7 17:55:21 2026 Received: from out-170.mta1.migadu.com (out-170.mta1.migadu.com [95.215.58.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BB1C82C032E for ; Thu, 25 Dec 2025 23:23:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766705002; cv=none; b=mUy0VWsI+05x3E/oC3Qi1Fz2SejhiJZXu9KOLZNMzveLrcDWqUXoKDEdYifNX5mMd6UnMNuZSQz+NAS1jH7h7ECp2WcZHq793WDpI1CwyBRQbX/P4ElpnW+pKNJ/i5cPdJ9grnqolTCRhWpEsnDXL7xiXwYomVz8qN9CpPLxYls= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766705002; c=relaxed/simple; bh=BHUaYQ2SOvX9SLyQ8sr8h3ipQ7+x6bAYum/l5cnUuYE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NFAOQlfMSTSOcqk83OEvqW3zrKDeuRaMSgAHd7rstrZ5oqrq5rmnJYyOzn6FRshYVNgSeaRfC30DPz3qhzpq8q6LL4ivBep5RpDE6gkq03f40uwAMTtPqEDK/LjNf0vUypiqYDxnqhFFodXyb4hStPxR6MGZHQ0gOGKhjGMIdmo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=wK8SnNRU; arc=none smtp.client-ip=95.215.58.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="wK8SnNRU" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1766704999; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=UpBdbnOOzwb8ZbK7UEBGlSGeYSG5qka67j2LUFyR/ao=; b=wK8SnNRUM+obbgwNDLw8wPAU74br+bFne6Qn2KeZ5l2hSZ+3DWjbscYBBjXr68/7gdx1g2 unc7D8bhz2pfNQaWQvFJ7/qahdnoD2wTfLWKgEiDURM3DvaSCnfvYNIhy2nJsNIFflmQ9g No/uUKzufd7eR+DI/Mz5Yv9RbchG2jc= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , SeongJae Park , Meta kernel team , linux-mm@kvack.org, cgroups@vger.kernel.org, damon@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 7/8] memcg: remove unused mem_cgroup_id() and mem_cgroup_from_id() Date: Thu, 25 Dec 2025 15:21:15 -0800 Message-ID: <20251225232116.294540-8-shakeel.butt@linux.dev> In-Reply-To: <20251225232116.294540-1-shakeel.butt@linux.dev> References: <20251225232116.294540-1-shakeel.butt@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Now that all callers have been converted to use either: - The private ID APIs (mem_cgroup_private_id/mem_cgroup_from_private_id) for internal kernel objects that outlive their cgroup - The public cgroup ID APIs (mem_cgroup_ino/mem_cgroup_get_from_ino) for external interfaces Remove the unused wrapper functions mem_cgroup_id() and mem_cgroup_from_id() along with their !CONFIG_MEMCG stubs. Signed-off-by: Shakeel Butt Acked-by: Michal Hocko --- include/linux/memcontrol.h | 18 ------------------ mm/memcontrol.c | 5 ----- 2 files changed, 23 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index c823150ec288..3e7d69020b39 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -830,12 +830,6 @@ static inline unsigned short mem_cgroup_private_id(str= uct mem_cgroup *memcg) } struct mem_cgroup *mem_cgroup_from_private_id(unsigned short id); =20 -static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg) -{ - return mem_cgroup_private_id(memcg); -} -struct mem_cgroup *mem_cgroup_from_id(unsigned short id); - static inline u64 mem_cgroup_ino(struct mem_cgroup *memcg) { return memcg ? cgroup_id(memcg->css.cgroup) : 0; @@ -1282,18 +1276,6 @@ static inline void mem_cgroup_scan_tasks(struct mem_= cgroup *memcg, { } =20 -static inline unsigned short mem_cgroup_id(struct mem_cgroup *memcg) -{ - return 0; -} - -static inline struct mem_cgroup *mem_cgroup_from_id(unsigned short id) -{ - WARN_ON_ONCE(id); - /* XXX: This should always return root_mem_cgroup */ - return NULL; -} - static inline unsigned short mem_cgroup_private_id(struct mem_cgroup *memc= g) { return 0; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 1ff2f9bd820c..ede39dde05df 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3615,11 +3615,6 @@ struct mem_cgroup *mem_cgroup_from_private_id(unsign= ed short id) return xa_load(&mem_cgroup_private_ids, id); } =20 -struct mem_cgroup *mem_cgroup_from_id(unsigned short id) -{ - return mem_cgroup_from_private_id(id); -} - struct mem_cgroup *mem_cgroup_get_from_ino(u64 ino) { struct cgroup *cgrp; --=20 2.47.3 From nobody Sat Feb 7 17:55:21 2026 Received: from out-188.mta1.migadu.com (out-188.mta1.migadu.com [95.215.58.188]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDA622C08A8 for ; Thu, 25 Dec 2025 23:23:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.188 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766705010; cv=none; b=KCByWpoZToz9llVOyUMnFZq5bfVE/93AeXmGCs+rlI07kLWw3Aya367uRVjoUvWHe0Ev6VImKx74Ve0Hzcb4qkJWIiZU472eUleCWaZrPSGEGv3ZkcDCnDd4rMY9uTbhjazoY8ApK+TCCAurhbsaLiiSNcAzX1+n/COopVnA3rY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766705010; c=relaxed/simple; bh=UuruIwdlaQWu4MKY5wBKcA32oRVtj1/hbo/JH66S8RQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G/8VVo0u801obLzuwty0jZzHMxwJvNTqdHrkJCDUH8oaMc4oMxboYftORcC88Pre3QUillO84TRM4hWEcr/a/D4205WiwJOqFuFJx9mtB5avZNiOUIrMUj1k8G0Ud7v4CW2C9JJzIu0IqonfGngryV2CfA42qTf2wlm8cCpb1vk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=oRUyGsqf; arc=none smtp.client-ip=95.215.58.188 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="oRUyGsqf" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1766705007; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8ipsZ9pFNe593ot4ifmspllIFtIPZMuP1LeaIWTARIM=; b=oRUyGsqfO8oIu0XGd1vMKX/zDnb+h/rLJ2bnmz5ROXbpXWcqrk1YtqliVCg/prB5bSjhN+ w9UrtORb08uds/G7Wk0VYMylP0zhakfDgUnt4d5VYs3HbRsKCYHo2q/BJCltTzf9lyK251 VobCXnbIvW3KJuSDm0yEZWfPIvuFzRM= From: Shakeel Butt To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Roman Gushchin , Muchun Song , SeongJae Park , Meta kernel team , linux-mm@kvack.org, cgroups@vger.kernel.org, damon@lists.linux.dev, linux-kernel@vger.kernel.org Subject: [PATCH 8/8] memcg: rename mem_cgroup_ino() to mem_cgroup_id() Date: Thu, 25 Dec 2025 15:21:16 -0800 Message-ID: <20251225232116.294540-9-shakeel.butt@linux.dev> In-Reply-To: <20251225232116.294540-1-shakeel.butt@linux.dev> References: <20251225232116.294540-1-shakeel.butt@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Rename mem_cgroup_ino() to mem_cgroup_id() and mem_cgroup_get_from_ino() to mem_cgroup_get_from_id(). These functions now use cgroup IDs (from cgroup_id()) rather than inode numbers, so the names should reflect that. Signed-off-by: Shakeel Butt Acked-by: Michal Hocko Reviewed-by: SeongJae Park --- include/linux/memcontrol.h | 8 ++++---- mm/damon/core.c | 2 +- mm/damon/ops-common.c | 2 +- mm/damon/sysfs-schemes.c | 2 +- mm/memcontrol.c | 2 +- mm/shrinker_debug.c | 10 +++++----- mm/vmscan.c | 6 +++--- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 3e7d69020b39..5a1161cadb8d 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -830,12 +830,12 @@ static inline unsigned short mem_cgroup_private_id(st= ruct mem_cgroup *memcg) } struct mem_cgroup *mem_cgroup_from_private_id(unsigned short id); =20 -static inline u64 mem_cgroup_ino(struct mem_cgroup *memcg) +static inline u64 mem_cgroup_id(struct mem_cgroup *memcg) { return memcg ? cgroup_id(memcg->css.cgroup) : 0; } =20 -struct mem_cgroup *mem_cgroup_get_from_ino(u64 ino); +struct mem_cgroup *mem_cgroup_get_from_id(u64 ino); =20 static inline struct mem_cgroup *mem_cgroup_from_seq(struct seq_file *m) { @@ -1288,12 +1288,12 @@ static inline struct mem_cgroup *mem_cgroup_from_pr= ivate_id(unsigned short id) return NULL; } =20 -static inline u64 mem_cgroup_ino(struct mem_cgroup *memcg) +static inline u64 mem_cgroup_id(struct mem_cgroup *memcg) { return 0; } =20 -static inline struct mem_cgroup *mem_cgroup_get_from_ino(u64 ino) +static inline struct mem_cgroup *mem_cgroup_get_from_id(u64 ino) { return NULL; } diff --git a/mm/damon/core.c b/mm/damon/core.c index 23c44811ff7f..a2513db59aee 100644 --- a/mm/damon/core.c +++ b/mm/damon/core.c @@ -2065,7 +2065,7 @@ static unsigned long damos_get_node_memcg_used_bp( unsigned long used_pages, numerator; struct sysinfo i; =20 - memcg =3D mem_cgroup_get_from_ino(goal->memcg_id); + memcg =3D mem_cgroup_get_from_id(goal->memcg_id); if (!memcg) { if (goal->metric =3D=3D DAMOS_QUOTA_NODE_MEMCG_USED_BP) return 0; diff --git a/mm/damon/ops-common.c b/mm/damon/ops-common.c index dd81db95f901..a218d9922234 100644 --- a/mm/damon/ops-common.c +++ b/mm/damon/ops-common.c @@ -274,7 +274,7 @@ bool damos_folio_filter_match(struct damos_filter *filt= er, struct folio *folio) if (!memcg) matched =3D false; else - matched =3D filter->memcg_id =3D=3D mem_cgroup_ino(memcg); + matched =3D filter->memcg_id =3D=3D mem_cgroup_id(memcg); rcu_read_unlock(); break; case DAMOS_FILTER_TYPE_YOUNG: diff --git a/mm/damon/sysfs-schemes.c b/mm/damon/sysfs-schemes.c index 79aa917ab3c0..3beb4456aa51 100644 --- a/mm/damon/sysfs-schemes.c +++ b/mm/damon/sysfs-schemes.c @@ -2511,7 +2511,7 @@ static int damon_sysfs_memcg_path_to_id(char *memcg_p= ath, u64 *id) if (!mem_cgroup_online(memcg)) continue; if (damon_sysfs_memcg_path_eq(memcg, path, memcg_path)) { - *id =3D mem_cgroup_ino(memcg); + *id =3D mem_cgroup_id(memcg); found =3D true; break; } diff --git a/mm/memcontrol.c b/mm/memcontrol.c index ede39dde05df..5b2925a68832 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -3615,7 +3615,7 @@ struct mem_cgroup *mem_cgroup_from_private_id(unsigne= d short id) return xa_load(&mem_cgroup_private_ids, id); } =20 -struct mem_cgroup *mem_cgroup_get_from_ino(u64 ino) +struct mem_cgroup *mem_cgroup_get_from_id(u64 ino) { struct cgroup *cgrp; struct cgroup_subsys_state *css; diff --git a/mm/shrinker_debug.c b/mm/shrinker_debug.c index 7ef16a0b2959..affa64437302 100644 --- a/mm/shrinker_debug.c +++ b/mm/shrinker_debug.c @@ -70,7 +70,7 @@ static int shrinker_debugfs_count_show(struct seq_file *m= , void *v) memcg_aware ? memcg : NULL, count_per_node); if (total) { - seq_printf(m, "%llu", mem_cgroup_ino(memcg)); + seq_printf(m, "%llu", mem_cgroup_id(memcg)); for_each_node(nid) seq_printf(m, " %lu", count_per_node[nid]); seq_putc(m, '\n'); @@ -107,7 +107,7 @@ static ssize_t shrinker_debugfs_scan_write(struct file = *file, { struct shrinker *shrinker =3D file->private_data; unsigned long nr_to_scan =3D 0, read_len; - u64 ino; + u64 id; struct shrink_control sc =3D { .gfp_mask =3D GFP_KERNEL, }; @@ -120,7 +120,7 @@ static ssize_t shrinker_debugfs_scan_write(struct file = *file, return -EFAULT; kbuf[read_len] =3D '\0'; =20 - if (sscanf(kbuf, "%llu %d %lu", &ino, &nid, &nr_to_scan) !=3D 3) + if (sscanf(kbuf, "%llu %d %lu", &id, &nid, &nr_to_scan) !=3D 3) return -EINVAL; =20 if (nid < 0 || nid >=3D nr_node_ids) @@ -130,7 +130,7 @@ static ssize_t shrinker_debugfs_scan_write(struct file = *file, return size; =20 if (shrinker->flags & SHRINKER_MEMCG_AWARE) { - memcg =3D mem_cgroup_get_from_ino(ino); + memcg =3D mem_cgroup_get_from_id(id); if (!memcg) return -ENOENT; =20 @@ -138,7 +138,7 @@ static ssize_t shrinker_debugfs_scan_write(struct file = *file, mem_cgroup_put(memcg); return -ENOENT; } - } else if (ino !=3D 0) { + } else if (id !=3D 0) { return -EINVAL; } =20 diff --git a/mm/vmscan.c b/mm/vmscan.c index d78043c7e4af..9ad2c2f06bfa 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -5426,7 +5426,7 @@ static int lru_gen_seq_show(struct seq_file *m, void = *v) if (memcg) cgroup_path(memcg->css.cgroup, m->private, PATH_MAX); #endif - seq_printf(m, "memcg %llu %s\n", mem_cgroup_ino(memcg), path); + seq_printf(m, "memcg %llu %s\n", mem_cgroup_id(memcg), path); } =20 seq_printf(m, " node %5d\n", nid); @@ -5522,12 +5522,12 @@ static int run_cmd(char cmd, u64 memcg_id, int nid,= unsigned long seq, return -EINVAL; =20 if (!mem_cgroup_disabled()) { - memcg =3D mem_cgroup_get_from_ino(memcg_id); + memcg =3D mem_cgroup_get_from_id(memcg_id); if (!memcg) return -EINVAL; } =20 - if (memcg_id !=3D mem_cgroup_ino(memcg)) + if (memcg_id !=3D mem_cgroup_id(memcg)) goto done; =20 sc->target_mem_cgroup =3D memcg; --=20 2.47.3