diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 705f50c6330d8f3511f367334a8d3fbfff341330..c2013b3e92e74fdccd54b47d78077ca3b9d255ed 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2555,6 +2555,12 @@ static void __split_huge_page(struct page *page, struct list_head *list, remap_page(head); + if (PageSwapCache(head)) { + swp_entry_t entry = { .val = page_private(head) }; + + split_swap_cluster(entry); + } + for (i = 0; i < HPAGE_PMD_NR; i++) { struct page *subpage = head + i; if (subpage == page) @@ -2792,12 +2798,7 @@ int split_huge_page_to_list(struct page *page, struct list_head *list) __dec_node_page_state(page, NR_SHMEM_THPS); spin_unlock(&pgdata->split_queue_lock); __split_huge_page(page, list, end, flags); - if (PageSwapCache(head)) { - swp_entry_t entry = { .val = page_private(head) }; - - ret = split_swap_cluster(entry); - } else - ret = 0; + ret = 0; } else { if (IS_ENABLED(CONFIG_DEBUG_VM) && mapcount) { pr_alert("total_mapcount: %u, page_count(): %u\n",