Merge tag 'mt76-for-kvalo-2021-01-29' of https://github.com/nbd168/wireless
[linux-2.6-microblaze.git] / mm / migrate.c
index ee5e612..c0efe92 100644 (file)
@@ -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_node_state(oldzone->zone_pgdat, NR_FILE_DIRTY);
-                       __dec_zone_state(oldzone, NR_ZONE_WRITE_PENDING);
-                       __inc_node_state(newzone->zone_pgdat, 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();