Re: [PATCH v3 26/30 fix] mm: mglru: do not call update_lru_size() during reparenting
From: Qi Zheng
Date: Wed Jan 21 2026 - 06:44:14 EST
On 1/21/26 12:19 PM, Harry Yoo wrote:
On Wed, Jan 21, 2026 at 12:53:28PM +0900, Harry Yoo wrote:
On Thu, Jan 15, 2026 at 06:44:44PM +0800, Qi Zheng wrote:
From: Qi Zheng <zhengqi.arch@xxxxxxxxxxxxx>
Only non-hierarchical lruvec_stats->state_local needs to be reparented,
so handle it in reparent_state_local(), and remove the unreasonable
update_lru_size() call in __lru_gen_reparent_memcg().
Hmm well, how are the hierarchical statistics consistent when pages are
reparented from an "active" gen to an "inactive" gen, or the other way around?
Oh, I completely forgot about that. If update_lru_size() is not called
during the rreparenting, this issue should be considered separately.
They'll become inconsistent when those pages are reclaimed or
moved between generations?
FYI we've observed this while testing downstream implementation
as it led to MemAvailable being unreasonably high due to inconsistent
statistics.
The solution was, if lru_gen_is_active(child, gen) and
lru_gen_is_active(parent, gen) do not match, # of pages being
reparented must be subtracted from the child's statistics
(and up to the root, as it's hierarchical), and added to the parent's
statistics for the generation.
Make sense, will fix it in v4.
Thanks!