diff options
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r-- | mm/page_alloc.c | 11 |
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 | } |
1566 | EXPORT_SYMBOL_GPL(split_page); | 1574 | EXPORT_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 | ||