]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mm: swap: remove duplicate nr_swap_pages decrement in get_swap_page_of_type()
authorYoungjun Park <youngjun.park@lge.com>
Sun, 2 Nov 2025 08:24:56 +0000 (17:24 +0900)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 24 Nov 2025 22:25:17 +0000 (14:25 -0800)
After commit 4f78252da887, nr_swap_pages is decremented in
swap_range_alloc(). Since cluster_alloc_swap_entry() calls
swap_range_alloc() internally, the decrement in get_swap_page_of_type()
causes double-decrementing.

As a representative userspace-visible runtime example of the impact,
/proc/meminfo reports increasingly inaccurate SwapFree values.  The
discrepancy grows with each swap allocation, and during hibernation
when large amounts of memory are written to swap, the reported value
can deviate significantly from actual available swap space, misleading
users and monitoring tools.

Remove the duplicate decrement.

Link: https://lkml.kernel.org/r/20251102082456.79807-1-youngjun.park@lge.com
Fixes: 4f78252da887 ("mm: swap: move nr_swap_pages counter decrement from folio_alloc_swap() to swap_range_alloc()")
Signed-off-by: Youngjun Park <youngjun.park@lge.com>
Acked-by: Chris Li <chrisl@kernel.org>
Reviewed-by: Barry Song <baohua@kernel.org>
Reviewed-by: Kairui Song <kasong@tencent.com>
Acked-by: Nhat Pham <nphamcs@gmail.com>
Cc: Baoquan He <bhe@redhat.com>
Cc: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: <stable@vger.kernel.org> [6.17+]
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/swapfile.c

index 10760240a3a29fbafda2893307698e1f6fb52713..a1b4b9d80e3b590f8e3e02a8c3022ae3660db821 100644 (file)
@@ -2005,10 +2005,8 @@ swp_entry_t get_swap_page_of_type(int type)
                        local_lock(&percpu_swap_cluster.lock);
                        offset = cluster_alloc_swap_entry(si, 0, 1);
                        local_unlock(&percpu_swap_cluster.lock);
-                       if (offset) {
+                       if (offset)
                                entry = swp_entry(si->type, offset);
-                               atomic_long_dec(&nr_swap_pages);
-                       }
                }
                put_swap_device(si);
        }