FAILED: patch "[PATCH] mm: fix numa stats for thp migration" failed to apply to 4.19-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 5c447d274f3746fbed6e695e7b9a2d7bd8b31b71 Mon Sep 17 00:00:00 2001
From: Shakeel Butt <[email protected]>
Date: Sat, 23 Jan 2021 21:01:15 -0800
Subject: [PATCH] mm: fix numa stats for thp migration
Currently the kernel is not correctly updating the numa stats for NR_FILE_PAGES and NR_SHMEM on THP migration. Fix that.
For NR_FILE_DIRTY and NR_ZONE_WRITE_PENDING, although at the moment there is no need to handle THP migration as kernel still does not have write support for file THP but to be more future proof, this patch adds the THP support for those stats as well.
mm/migrate.c +12 -11
@@ -402,6 +402,7 @@ int migrate_page_move_mapping(struct address_space *mapping,struct zone *oldzone, *newzone;int dirty;int expected_count =expected_page_refs (mapping, page) + extra_count; +int nr =thp_nr_pages (page);if (!mapping) {/* Anonymous page without mapping */
@@ -437,7 +438,7 @@ int migrate_page_move_mapping(struct address_space *mapping,*/ newpage->index = page->index; newpage->mapping = page->mapping; -page_ref_add (newpage,thp_nr_pages (page));/* add cache reference */ +page_ref_add (newpage, nr);/* add cache reference */ if (PageSwapBacked (page)) {__SetPageSwapBacked (newpage);if (PageSwapCache (page)) {
@@ -459,7 +460,7 @@ int migrate_page_move_mapping(struct address_space *mapping,if (PageTransHuge (page)) {int i; -for (i =1 ; i <HPAGE_PMD_NR ; i++) { +for (i =1 ; i < nr; i++) {xas_next (&xas);xas_store (&xas, newpage); }
@@ -470,7 +471,7 @@ int migrate_page_move_mapping(struct address_space *mapping,* to one less reference. * We know this isn't the last reference. */ -page_ref_unfreeze (page, expected_count -thp_nr_pages (page)); +page_ref_unfreeze (page, expected_count - nr);xas_unlock (&xas);/* Leave irq disabled to prevent preemption while updating stats */
@@ -493,17 +494,17 @@ int migrate_page_move_mapping(struct address_space *mapping, old_lruvec =mem_cgroup_lruvec (memcg, oldzone->zone_pgdat); new_lruvec =mem_cgroup_lruvec (memcg, newzone->zone_pgdat); -__dec_lruvec_state (old_lruvec,NR_FILE_PAGES ); -__inc_lruvec_state (new_lruvec,NR_FILE_PAGES ); +__mod_lruvec_state (old_lruvec,NR_FILE_PAGES , -nr); +__mod_lruvec_state (new_lruvec,NR_FILE_PAGES , nr);if (PageSwapBacked (page) && !PageSwapCache (page)) { -__dec_lruvec_state (old_lruvec,NR_SHMEM ); -__inc_lruvec_state (new_lruvec,NR_SHMEM ); +__mod_lruvec_state (old_lruvec,NR_SHMEM , -nr); +__mod_lruvec_state (new_lruvec,NR_SHMEM , nr); }if (dirty &&mapping_can_writeback (mapping)) { -__dec_lruvec_state (old_lruvec,NR_FILE_DIRTY ); -__dec_zone_state (oldzone,NR_ZONE_WRITE_PENDING ); -__inc_lruvec_state (new_lruvec,NR_FILE_DIRTY ); -__inc_zone_state (newzone,NR_ZONE_WRITE_PENDING ); +__mod_lruvec_state (old_lruvec,NR_FILE_DIRTY , -nr); +__mod_zone_page_state (oldzone,NR_ZONE_WRITE_PENDING , -nr); +__mod_lruvec_state (new_lruvec,NR_FILE_DIRTY , nr); +__mod_zone_page_state (newzone,NR_ZONE_WRITE_PENDING , nr); } }local_irq_enable ();