diff options
Diffstat (limited to 'mm')
-rw-r--r-- | mm/page_alloc.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index a0de15f46987..9faa7ad95ac5 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -234,6 +234,12 @@ static void bad_page(struct page *page) | |||
234 | static unsigned long nr_shown; | 234 | static unsigned long nr_shown; |
235 | static unsigned long nr_unshown; | 235 | static unsigned long nr_unshown; |
236 | 236 | ||
237 | /* Don't complain about poisoned pages */ | ||
238 | if (PageHWPoison(page)) { | ||
239 | __ClearPageBuddy(page); | ||
240 | return; | ||
241 | } | ||
242 | |||
237 | /* | 243 | /* |
238 | * Allow a burst of 60 reports, then keep quiet for that minute; | 244 | * Allow a burst of 60 reports, then keep quiet for that minute; |
239 | * or allow a steady drip of one report per second. | 245 | * or allow a steady drip of one report per second. |
@@ -646,7 +652,7 @@ static inline void expand(struct zone *zone, struct page *page, | |||
646 | /* | 652 | /* |
647 | * This page is about to be returned from the page allocator | 653 | * This page is about to be returned from the page allocator |
648 | */ | 654 | */ |
649 | static int prep_new_page(struct page *page, int order, gfp_t gfp_flags) | 655 | static inline int check_new_page(struct page *page) |
650 | { | 656 | { |
651 | if (unlikely(page_mapcount(page) | | 657 | if (unlikely(page_mapcount(page) | |
652 | (page->mapping != NULL) | | 658 | (page->mapping != NULL) | |
@@ -655,6 +661,18 @@ static int prep_new_page(struct page *page, int order, gfp_t gfp_flags) | |||
655 | bad_page(page); | 661 | bad_page(page); |
656 | return 1; | 662 | return 1; |
657 | } | 663 | } |
664 | return 0; | ||
665 | } | ||
666 | |||
667 | static int prep_new_page(struct page *page, int order, gfp_t gfp_flags) | ||
668 | { | ||
669 | int i; | ||
670 | |||
671 | for (i = 0; i < (1 << order); i++) { | ||
672 | struct page *p = page + i; | ||
673 | if (unlikely(check_new_page(p))) | ||
674 | return 1; | ||
675 | } | ||
658 | 676 | ||
659 | set_page_private(page, 0); | 677 | set_page_private(page, 0); |
660 | set_page_refcounted(page); | 678 | set_page_refcounted(page); |