]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm, swap: remove setting SWAP_MAP_BAD for discard cluster
authorKemeng Shi <shikemeng@huaweicloud.com>
Sat, 22 Feb 2025 16:08:48 +0000 (00:08 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 28 Feb 2025 01:00:28 +0000 (17:00 -0800)
Before alloc from a cluster, we will aqcuire cluster's lock and make sure
it is usable by cluster_is_usable(), so there is no need to set
SWAP_MAP_BAD for cluster to be discarded.

Link: https://lkml.kernel.org/r/20250222160850.505274-5-shikemeng@huaweicloud.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Reviewed-by: Kairui Song <kasong@tencent.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/swapfile.c

index cab68e57f4ccb67c6e31cc677a9271f6219a49f1..80e4ad24fe53ca296195c292ff890832e6dc0461 100644 (file)
@@ -479,15 +479,6 @@ static void move_cluster(struct swap_info_struct *si,
 static void swap_cluster_schedule_discard(struct swap_info_struct *si,
                struct swap_cluster_info *ci)
 {
-       unsigned int idx = cluster_index(si, ci);
-       /*
-        * If scan_swap_map_slots() can't find a free cluster, it will check
-        * si->swap_map directly. To make sure the discarding cluster isn't
-        * taken by scan_swap_map_slots(), mark the swap entries bad (occupied).
-        * It will be cleared after discard
-        */
-       memset(si->swap_map + idx * SWAPFILE_CLUSTER,
-                       SWAP_MAP_BAD, SWAPFILE_CLUSTER);
        VM_BUG_ON(ci->flags == CLUSTER_FLAG_FREE);
        move_cluster(si, ci, &si->discard_clusters, CLUSTER_FLAG_DISCARD);
        schedule_work(&si->discard_work);
@@ -571,8 +562,6 @@ static bool swap_do_scheduled_discard(struct swap_info_struct *si)
                 * return the cluster to allocation list.
                 */
                ci->flags = CLUSTER_FLAG_NONE;
-               memset(si->swap_map + idx * SWAPFILE_CLUSTER,
-                               0, SWAPFILE_CLUSTER);
                __free_cluster(si, ci);
                spin_unlock(&ci->lock);
                ret = true;