summaryrefslogtreecommitdiffstats
path: root/mm/page_alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r--mm/page_alloc.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 303d38516807..c13b6b29add2 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -59,6 +59,7 @@
59#include <linux/page_ext.h> 59#include <linux/page_ext.h>
60#include <linux/hugetlb.h> 60#include <linux/hugetlb.h>
61#include <linux/sched/rt.h> 61#include <linux/sched/rt.h>
62#include <linux/page_owner.h>
62 63
63#include <asm/sections.h> 64#include <asm/sections.h>
64#include <asm/tlbflush.h> 65#include <asm/tlbflush.h>
@@ -813,6 +814,8 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
813 if (bad) 814 if (bad)
814 return false; 815 return false;
815 816
817 reset_page_owner(page, order);
818
816 if (!PageHighMem(page)) { 819 if (!PageHighMem(page)) {
817 debug_check_no_locks_freed(page_address(page), 820 debug_check_no_locks_freed(page_address(page),
818 PAGE_SIZE << order); 821 PAGE_SIZE << order);
@@ -988,6 +991,8 @@ static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags)
988 if (order && (gfp_flags & __GFP_COMP)) 991 if (order && (gfp_flags & __GFP_COMP))
989 prep_compound_page(page, order); 992 prep_compound_page(page, order);
990 993
994 set_page_owner(page, order, gfp_flags);
995
991 return 0; 996 return 0;
992} 997}
993 998
@@ -1560,8 +1565,11 @@ void split_page(struct page *page, unsigned int order)
1560 split_page(virt_to_page(page[0].shadow), order); 1565 split_page(virt_to_page(page[0].shadow), order);
1561#endif 1566#endif
1562 1567
1563 for (i = 1; i < (1 << order); i++) 1568 set_page_owner(page, 0, 0);
1569 for (i = 1; i < (1 << order); i++) {
1564 set_page_refcounted(page + i); 1570 set_page_refcounted(page + i);
1571 set_page_owner(page + i, 0, 0);
1572 }
1565} 1573}
1566EXPORT_SYMBOL_GPL(split_page); 1574EXPORT_SYMBOL_GPL(split_page);
1567 1575
@@ -1601,6 +1609,7 @@ int __isolate_free_page(struct page *page, unsigned int order)
1601 } 1609 }
1602 } 1610 }
1603 1611
1612 set_page_owner(page, order, 0);
1604 return 1UL << order; 1613 return 1UL << order;
1605} 1614}
1606 1615