From: Qi Zheng <qi.zheng@linux.dev>
To: Andrew Morton <akpm@linux-foundation.org>, usama.arif@linux.dev
Cc: hughd@google.com, baolin.wang@linux.alibaba.com,
brauner@kernel.org, david@kernel.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org,
Qi Zheng <zhengqi.arch@bytedance.com>
Subject: Re: [PATCH v4 1/4] fs: fix missed removal of super_fs_objects_eligible()
Date: Tue, 1 Sep 2026 10:25:57 +0800 [thread overview]
Message-ID: <6aea8093-54ee-49f2-916c-09b2c6587f20@linux.dev> (raw)
In-Reply-To: <20260831192143.84da447c4fa2afb60757afa4@linux-foundation.org>
On 9/1/26 10:21 AM, Andrew Morton wrote:
> On Mon, 31 Aug 2026 10:28:00 +0800 Qi Zheng <qi.zheng@linux.dev> wrote:
>
>>> OK, please add this info to this patch's changelog. Please also decide
>>> whether a cc:stable should be added and if so, ensure the changelog
>>> makes clear why we're recommending a backport.
>>>
>>> As part of this, let's expand on "XFS will also run into issues".
>>
>> How about this instead:
>>
>> ---
>> Commit 0ef8faff490be ("fs: push nr_cached_objects memcg gating into
>> individual filesystems") was meant to drop the blanket memcg gate in
>> fs/super.c and let each ->nr_cached_objects() implementation decide
>> for itself whether it is meaningful in per-memcg reclaim. However,
>> when that patch was applied the removal of super_fs_objects_eligible()
>> and its two call sites in super_cache_scan() / super_cache_count() was
>> lost, so the helper is still gating every ->nr_cached_objects() hook
>> and 0ef8faff490be is effectively a no-op.
>>
>> Consequences of the leftover gate:
>>
>> - XFS's inode-reclaim hook, which is intentionally driven from
>> per-memcg contexts to free memcg-charged slab, is still
>> short-circuited in fs/super.c — exactly the regression from
>> commit 0baad6f9b997 ("fs/super: skip non-memcg-aware
>> nr_cached_objects in memcg slab shrink") that 0ef8faff490be was
>> written to undo. Memcg-charged XFS inode slab therefore keeps
>> piling up under per-memcg pressure until global reclaim kicks in.
>>
>> - Any future ->nr_cached_objects()/->free_cached_objects() that
>> grows memcg awareness is likewise blocked before it can run, so
>> filesystems cannot opt in to per-memcg reclaim on their own —
>> defeating the whole point of pushing the gating decision down
>> into the callbacks.
>>
>> Drop the leftover helper and its call sites so the intent of
>> 0ef8faff490be actually takes effect.
>>
>> Fixes: 0ef8faff490be ("fs: push nr_cached_objects memcg gating into
>> individual filesystems")
>> Cc: stable@vger.kernel.org
>> ---
>>
>> Can you fix up the commit message directly on your end? Let me know if
>> you prefer me to spin a v5 instead.
>
> Thanks. I pasted this in and turned your [1/4] into a standalone patch
> for mm-hotfixes, with a cc:stable.
Thanks!
>
> The remaining three patches I turned into a separate series for the
> next merge window.
OK.
>
> This particular patch has no evidence of reviewer input yet?
Hi Usama, could you please help review this patch?
Thanks,
Qi
>
>
> From: Qi Zheng <zhengqi.arch@bytedance.com>
> Subject: fs: fix missed removal of super_fs_objects_eligible()
> Date: Mon, 17 Aug 2026 17:03:25 +0800
>
> Commit 0ef8faff490be ("fs: push nr_cached_objects memcg gating into
> individual filesystems") was meant to drop the blanket memcg gate in
> fs/super.c and let each ->nr_cached_objects() implementation decide for
> itself whether it is meaningful in per-memcg reclaim. However, when
> that patch was applied the removal of super_fs_objects_eligible() and
> its two call sites in super_cache_scan() / super_cache_count() was
> lost, so the helper is still gating every ->nr_cached_objects() hook
> and 0ef8faff490be is effectively a no-op.
>
> Consequences of the leftover gate:
>
> - XFS's inode-reclaim hook, which is intentionally driven from
> per-memcg contexts to free memcg-charged slab, is still
> short-circuited in fs/super.c exactly the regression from
> commit 0baad6f9b997 ("fs/super: skip non-memcg-aware
> nr_cached_objects in memcg slab shrink") that 0ef8faff490be was
> written to undo. Memcg-charged XFS inode slab therefore keeps
> piling up under per-memcg pressure until global reclaim kicks in.
>
> - Any future ->nr_cached_objects()/->free_cached_objects() that
> grows memcg awareness is likewise blocked before it can run, so
> filesystems cannot opt in to per-memcg reclaim on their own
> defeating the whole point of pushing the gating decision down
> into the callbacks.
>
> Drop the leftover helper and its call sites so the intent of
> 0ef8faff490be actually takes effect.
>
> Link: https://lore.kernel.org/cover.1786955972.git.zhengqi.arch@bytedance.com
> Link: https://lore.kernel.org/3b038d373c70ebac7cdabfb0035bb91d1d6e6cfe.1786955972.git.zhengqi.arch@bytedance.com
> Link: https://lore.kernel.org/all/20260715103516.2410175-1-usama.arif@linux.dev/ [0]
> Fixes: 0ef8faff490b ("fs: push nr_cached_objects memcg gating into individual filesystems")
> Signed-off-by: Qi Zheng <zhengqi.arch@bytedance.com>
> Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
> Cc: Christian Brauner <brauner@kernel.org>
> Cc: David Hildenbrand <david@kernel.org>
> Cc: Hugh Dickins <hughd@google.com>
> Cc: Christian Brauner <brauner@kernel.org>
> Cc: David Hildenbrand <david@kernel.org>
> Cc: Hugh Dickins <hughd@google.com>
> Cc: Johannes Weiner <hannes@cmpxchg.org>
> Cc: Michal Hocko <mhocko@kernel.org>
> Cc: Muchun Song <muchun.song@linux.dev>
> Cc: Roman Gushchin <roman.gushchin@linux.dev>
> Cc: Shakeel Butt <shakeel.butt@linux.dev>
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
> ---
>
> fs/super.c | 18 ++----------------
> 1 file changed, 2 insertions(+), 16 deletions(-)
>
> --- a/fs/super.c~fs-fix-missed-removal-of-super_fs_objects_eligible
> +++ a/fs/super.c
> @@ -172,19 +172,6 @@ static void super_wake(struct super_bloc
> }
>
> /*
> - * The s_op->nr_cached_objects hooks (used for example by btrfs and xfs)
> - * operate on filesystem-global state and ignore sc->memcg. Driving them
> - * from per-memcg shrink_slab_memcg() invocations only burns CPU walking
> - * per-cpu counters and queueing duplicate work: the actual reclaim happens on
> - * the global path (kswapd or root direct reclaim) regardless. Restrict them
> - * to that path.
> - */
> -static inline bool super_fs_objects_eligible(struct shrink_control *sc)
> -{
> - return !sc->memcg || mem_cgroup_is_root(sc->memcg);
> -}
> -
> -/*
> * One thing we have to be careful of with a per-sb shrinker is that we don't
> * drop the last active reference to the superblock from within the shrinker.
> * If that happens we could trigger unregistering the shrinker from within the
> @@ -213,7 +200,7 @@ static unsigned long super_cache_scan(st
> if (!super_trylock_shared(sb))
> return SHRINK_STOP;
>
> - if (sb->s_op->nr_cached_objects && super_fs_objects_eligible(sc))
> + if (sb->s_op->nr_cached_objects)
> fs_objects = sb->s_op->nr_cached_objects(sb, sc);
>
> inodes = list_lru_shrink_count(&sb->s_inode_lru, sc);
> @@ -274,8 +261,7 @@ static unsigned long super_cache_count(s
> return 0;
> smp_rmb();
>
> - if (sb->s_op && sb->s_op->nr_cached_objects &&
> - super_fs_objects_eligible(sc))
> + if (sb->s_op && sb->s_op->nr_cached_objects)
> total_objects = sb->s_op->nr_cached_objects(sb, sc);
>
> total_objects += list_lru_shrink_count(&sb->s_dentry_lru, sc);
> _
>
next prev parent reply other threads:[~2026-09-01 2:26 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-17 9:03 [PATCH v4 0/4] make unused huge shrinker memcg aware Qi Zheng
2026-08-17 9:03 ` [PATCH v4 1/4] fs: fix missed removal of super_fs_objects_eligible() Qi Zheng
2026-08-28 18:41 ` Andrew Morton
2026-08-29 1:49 ` Qi Zheng
2026-08-29 23:23 ` Andrew Morton
2026-08-31 2:28 ` Qi Zheng
2026-09-01 2:21 ` Andrew Morton
2026-09-01 2:25 ` Qi Zheng [this message]
2026-09-01 9:51 ` Usama Arif
2026-08-17 9:03 ` [PATCH v4 2/4] mm: memcontrol: make obj_cgroup_memcg() handle NULL objcg Qi Zheng
2026-08-17 11:29 ` Qi Zheng
2026-08-17 16:05 ` Shakeel Butt
2026-08-17 9:03 ` [PATCH v4 3/4] mm: shmem: move unused huge shrinklist queuing past the truncation check Qi Zheng
2026-08-17 9:03 ` [PATCH v4 4/4] mm: shmem: make unused huge shrinker memcg aware Qi Zheng
2026-08-18 3:54 ` Baolin Wang
2026-08-27 22:50 ` [PATCH v4 0/4] " Andrew Morton
2026-08-28 2:48 ` Qi Zheng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6aea8093-54ee-49f2-916c-09b2c6587f20@linux.dev \
--to=qi.zheng@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=baolin.wang@linux.alibaba.com \
--cc=brauner@kernel.org \
--cc=david@kernel.org \
--cc=hughd@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=usama.arif@linux.dev \
--cc=zhengqi.arch@bytedance.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.