Re: [PATCH] mm/mincore: handle non-swap entries before !CONFIG_SWAP guard
From: Kairui Song
Date: Tue Jun 02 2026 - 22:56:52 EST
On Wed, Jun 3, 2026 at 1:23 AM Usama Arif <usama.arif@xxxxxxxxx> 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@xxxxxxxxx>
> ---
> This was discovered when working on PMD swap entry series
> (https://lore.kernel.org/all/20260602142537.198755-1-usama.arif@xxxxxxxxx/)
> ---
> 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;
>
> + 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
Looks good to me, thanks!
Reviewed-by: Kairui Song <kasong@xxxxxxxxxxx>