blob: 3da1d81a323cf7ad417509a64c73e43add5be871 [file] [log] [blame]
From: Baoquan He <bhe@redhat.com>
Subject: mm/swap: skip scanning cluster range if it's empty cluster
Date: Wed, 5 Feb 2025 17:27:13 +0800
Since ci->lock has been taken when isolating cluster from
si->free_clusters or taking si->percpu_cluster->next[order], it's
unnecessary to scan and check the cluster range availability if i'ts empty
cluster, and this can accelerate the huge page swapping.
Link: https://lkml.kernel.org/r/20250205092721.9395-5-bhe@redhat.com
Signed-off-by: Baoquan He <bhe@redhat.com>
Cc: Chris Li <chrisl@kernel.org>
Cc: Kairui Song <ryncsn@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
mm/swapfile.c | 3 +++
1 file changed, 3 insertions(+)
--- a/mm/swapfile.c~mm-swap-skip-scanning-cluster-range-if-its-empty-cluster
+++ a/mm/swapfile.c
@@ -730,6 +730,9 @@ static bool cluster_scan_range(struct sw
unsigned long offset, end = start + nr_pages;
unsigned char *map = si->swap_map;
+ if (cluster_is_empty(ci))
+ return true;
+
for (offset = start; offset < end; offset++) {
switch (READ_ONCE(map[offset])) {
case 0:
_