From: Usama Arif <usama.arif@linux.dev>
To: Lorenzo Stoakes <ljs@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
jannh@google.com, liam@infradead.org,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
pfalcato@suse.de, vbabka@kernel.org, chrisl@kernel.org,
kasong@tencent.com, baoquan.he@linux.dev, youngjun.park@lge.com,
hannes@cmpxchg.org, riel@surriel.com, shakeel.butt@linux.dev,
kas@kernel.org, kernel-team@meta.com
Subject: Re: [PATCH] mm/mincore: handle non-swap entries before !CONFIG_SWAP guard
Date: Wed, 3 Jun 2026 13:20:00 +0100 [thread overview]
Message-ID: <ea70f2cd-0cca-4703-973c-6f3344ac345a@linux.dev> (raw)
In-Reply-To: <aiAY9FiHthu_CwIC@lucifer>
On 03/06/2026 13:08, Lorenzo Stoakes wrote:
> On Tue, Jun 02, 2026 at 10:22:47AM -0700, Usama Arif wrote:
>> mincore_swap() also fields migration/hwpoison entries (and shmem
>> swapin-error entries), which can exist on !CONFIG_SWAP builds when
>> CONFIG_MIGRATION or CONFIG_MEMORY_FAILURE is enabled. The
>> !IS_ENABLED(CONFIG_SWAP) guard ran before the non-swap-entry early
>> return, so mincore_pte_range() can spuriously WARN and report these
>> pages nonresident on !CONFIG_SWAP kernels.
>>
>> Move the guard below the non-swap-entry check so only true swap
>> entries trip the WARN, and migration/hwpoison entries take the
>> existing "uptodate / non-shmem" path.
>>
>> Fixes: 1f2052755c15 ("mm/mincore: use a helper for checking the swap cache")
>> Signed-off-by: Usama Arif <usama.arif@linux.dev>
>
> Logic LGTM so:
>
> Reviewed-by: Lorenzo Stoakes <ljs@kernel.org>
>
> Small note below but I think not a problem.
>
> Thanks, Lorenzo
>
>> ---
>> This was discovered when working on PMD swap entry series
>> (https://lore.kernel.org/all/20260602142537.198755-1-usama.arif@linux.dev/)
>> ---
>> mm/mincore.c | 10 +++++-----
>> 1 file changed, 5 insertions(+), 5 deletions(-)
>>
>> diff --git a/mm/mincore.c b/mm/mincore.c
>> index e5d13eea9234..296f2e3922b5 100644
>> --- a/mm/mincore.c
>> +++ b/mm/mincore.c
>> @@ -64,11 +64,6 @@ static unsigned char mincore_swap(swp_entry_t entry, bool shmem)
>> struct folio *folio = NULL;
>> unsigned char present = 0;
>>
>> - if (!IS_ENABLED(CONFIG_SWAP)) {
>> - WARN_ON(1);
>> - return 0;
>> - }
>> -
>> /*
>> * Shmem mapping may contain swapin error entries, which are
>> * absent. Page table may contain migration or hwpoison
>> @@ -77,6 +72,11 @@ static unsigned char mincore_swap(swp_entry_t entry, bool shmem)
>> if (!softleaf_is_swap(entry))
>> return !shmem;
>>
>
> I guess fine to do this after software_is_swap() because for !CONFIG_SWAP this
> will always evaluate false?
Yes, thats right. In softleaf_is_swap(), softleaf_type() returns SOFTLEAF_SWAP
iff type_num < MAX_SWAPFILES. MAX_SWAPFILES is a compile-time constant independent
of CONFIG_SWAP, so softleaf_is_swap() isn't structurally gated, but every producer
of real swap entries lives under CONFIG_SWAP.
With !CONFIG_SWAP none of those run, so softleaf_is_swap() is always false.
>
> Not a big deal therefore I think.
>
>> + if (!IS_ENABLED(CONFIG_SWAP)) {
>> + WARN_ON(1);
>> + return 0;
>> + }
>> +
>> /*
>> * Shmem mapping lookup is lockless, so we need to grab the swap
>> * device. mincore page table walk locks the PTL, and the swap
>> --
>> 2.52.0
>>
next prev parent reply other threads:[~2026-06-03 12:20 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-02 17:22 [PATCH] mm/mincore: handle non-swap entries before !CONFIG_SWAP guard Usama Arif
2026-06-02 17:51 ` Pedro Falcato
2026-06-03 9:52 ` Usama Arif
2026-06-03 12:07 ` Lorenzo Stoakes
2026-06-03 18:23 ` Andrew Morton
2026-06-03 2:55 ` Kairui Song
2026-06-03 12:08 ` Lorenzo Stoakes
2026-06-03 12:20 ` Usama Arif [this message]
2026-06-03 15:02 ` Johannes Weiner
2026-06-08 15:34 ` Nhat Pham
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=ea70f2cd-0cca-4703-973c-6f3344ac345a@linux.dev \
--to=usama.arif@linux.dev \
--cc=akpm@linux-foundation.org \
--cc=baoquan.he@linux.dev \
--cc=chrisl@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=jannh@google.com \
--cc=kas@kernel.org \
--cc=kasong@tencent.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=pfalcato@suse.de \
--cc=riel@surriel.com \
--cc=shakeel.butt@linux.dev \
--cc=vbabka@kernel.org \
--cc=youngjun.park@lge.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.