From: "Gregory Price (Meta)" <gourry@gourry.net>
To: "Vlastimil Babka (SUSE)" <vbabka@kernel.org>
Cc: "Gregory Price (Meta)" <gourry@gourry.net>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
kernel-team@meta.com, muchun.song@linux.dev, osalvador@suse.de,
david@kernel.org, akpm@linux-foundation.org, ziy@nvidia.com,
joshua.hahnjy@gmail.com, rakie.kim@sk.com,
ying.huang@linux.alibaba.com, ljs@kernel.org,
liam@infradead.org, rppt@kernel.org, surenb@google.com,
mhocko@suse.com, brendan.jackman@linux.dev, hannes@cmpxchg.org,
mgorman@techsingularity.net, anshuman.khandual@arm.com,
stable@vger.kernel.org
Subject: Re: [PATCH v4 1/8] mm/page_alloc: reset can_retry_reserves when the slowpath restarts
Date: Thu, 29 Oct 2026 12:31:48 -0400 [thread overview]
Message-ID: <179329150807.2127828.16376500334625424120.b4-reply@b4> (raw)
In-Reply-To: <68fd8182-cdfb-4f11-95de-1472e6c92d33@kernel.org>
On 2026-10-29 14:37 +0100, Vlastimil Babka (SUSE) wrote:
> On 10/28/26 22:19, Gregory Price (Meta) wrote:
> > Commit 2c4c3e29897d ("mm/page_alloc: simplify __alloc_pages_slowpath()
> > flow") retries an allocation once with reserve_flags when the caller
> > becomes eligible for reserves, guarded by can_retry_reserves. The flag
> > is set at its declaration and never reset.
> >
> > A restart after a cpuset update or a zonelist rebuild drops
> > reserve_flags
>
> I don't follow, nothing "drops reserve_flags"? after the restart,
> there will still be a get_page_from_freelist() without them followed by
> get_page_from_freelist() with them, right?
>
"Drops" is the wrong word, sorry.
After a restart the reserve bits are recomputed, but can_retry_reserves
is already false. As a result no-reclaim/PF_MEMALLOC callers don't
get a reserve-retry attempt (we just exit w/ nopage).
Reclaim callers are fine.
This problem exists regardless of the rest of the series.
But you're right, I will rework the commit message.
> > Reset can_retry_reserves at restart. Only a cpuset or zonelist change
> > restarts the slowpath, so the retry still runs at most once per change.
> >
> > With kprobes failing every attempt without reserves and the first with
> > them, and a memory block onlined during the walk, the allocation
> > returned NULL in 3 of 3 runs, and a page in 3 of 3 with this change.
>
> So IIUC the allocation was racing with a memory online in a way that it
> would fail if the online happened fully after the allocation. So this just
> turns part of the race window into the allocation's favor?
>
> I mean it's not wrong and if patch 5 depends on it (unless it also only
> fixes a racy window in the same way I think is happening here) then so be
> it. But the commit log would need correcting.
>
Not quite - without the online it would have succeeded. The zonelist
rebuild rewrites the lists in-place, so a concurrent walk can miss valid
zones or pick the wrong zone. The rest of the series detects more of
these restart scenarios.
Those restarts then exacerbate the issue this patch resolves. For
example, patch 5 would free a reserve allocation that succeeded - and
then fail because can_retry_reserves is already false.
--
~Gregory
next prev parent reply other threads:[~2026-10-29 16:31 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-28 21:19 [PATCH v4 0/8] mm: fix allocator races with memory hotplug Gregory Price (Meta)
2026-10-28 21:19 ` [PATCH v4 1/8] mm/page_alloc: reset can_retry_reserves when the slowpath restarts Gregory Price (Meta)
2026-10-29 13:37 ` Vlastimil Babka (SUSE)
2026-10-29 16:31 ` Gregory Price (Meta) [this message]
2026-10-28 21:19 ` [PATCH v4 2/8] mm/page_alloc: detect zonelist rebuilds from memory hot-add Gregory Price (Meta)
2026-10-28 21:19 ` [PATCH v4 3/8] mm/page_alloc: snapshot the preferred zone against shrink rebuilds Gregory Price (Meta)
2026-10-29 15:21 ` Vlastimil Babka (SUSE)
2026-10-28 21:19 ` [PATCH v4 4/8] mm/mmzone: read each zoneref slot once when filtering by nodemask Gregory Price (Meta)
2026-10-29 15:51 ` Vlastimil Babka (SUSE)
2026-10-28 21:19 ` [PATCH v4 5/8] mm/page_alloc: retry allocations that raced with a zonelist rebuild Gregory Price (Meta)
2026-10-29 17:47 ` Vlastimil Babka (SUSE)
2026-10-28 21:19 ` [PATCH v4 6/8] mm/hugetlb: retry the pool walk when the zonelist is rebuilt Gregory Price (Meta)
2026-10-29 18:08 ` Vlastimil Babka (SUSE)
2026-10-28 21:19 ` [PATCH v4 7/8] mm/page_alloc: retry alloc_contig_pages() " Gregory Price (Meta)
2026-10-29 18:10 ` Vlastimil Babka (SUSE)
2026-10-28 21:19 ` [PATCH v4 8/8] mm/mempolicy: read the zoneref slot once in mempolicy_slab_node() Gregory Price (Meta)
2026-10-29 18:16 ` Vlastimil Babka (SUSE)
2026-10-29 18:52 ` [PATCH v4 0/8] mm: fix allocator races with memory hotplug Gregory Price (Meta)
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=179329150807.2127828.16376500334625424120.b4-reply@b4 \
--to=gourry@gourry.net \
--cc=akpm@linux-foundation.org \
--cc=anshuman.khandual@arm.com \
--cc=brendan.jackman@linux.dev \
--cc=david@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=joshua.hahnjy@gmail.com \
--cc=kernel-team@meta.com \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=ljs@kernel.org \
--cc=mgorman@techsingularity.net \
--cc=mhocko@suse.com \
--cc=muchun.song@linux.dev \
--cc=osalvador@suse.de \
--cc=rakie.kim@sk.com \
--cc=rppt@kernel.org \
--cc=stable@vger.kernel.org \
--cc=surenb@google.com \
--cc=vbabka@kernel.org \
--cc=ying.huang@linux.alibaba.com \
--cc=ziy@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®