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.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index ce63d603820f..d02d6436add0 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -466,6 +466,7 @@ void prep_compound_page(struct page *page, unsigned int order)
466 for (i = 1; i < nr_pages; i++) { 466 for (i = 1; i < nr_pages; i++) {
467 struct page *p = page + i; 467 struct page *p = page + i;
468 set_page_count(p, 0); 468 set_page_count(p, 0);
469 p->mapping = TAIL_MAPPING;
469 set_compound_head(p, page); 470 set_compound_head(p, page);
470 } 471 }
471} 472}
@@ -856,6 +857,10 @@ static int free_tail_pages_check(struct page *head_page, struct page *page)
856 ret = 0; 857 ret = 0;
857 goto out; 858 goto out;
858 } 859 }
860 if (page->mapping != TAIL_MAPPING) {
861 bad_page(page, "corrupted mapping in tail page", 0);
862 goto out;
863 }
859 if (unlikely(!PageTail(page))) { 864 if (unlikely(!PageTail(page))) {
860 bad_page(page, "PageTail not set", 0); 865 bad_page(page, "PageTail not set", 0);
861 goto out; 866 goto out;
@@ -866,6 +871,7 @@ static int free_tail_pages_check(struct page *head_page, struct page *page)
866 } 871 }
867 ret = 0; 872 ret = 0;
868out: 873out:
874 page->mapping = NULL;
869 clear_compound_head(page); 875 clear_compound_head(page);
870 return ret; 876 return ret;
871} 877}