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.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index a2955e101715..da526905b4a5 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -509,16 +509,26 @@ static inline int page_is_buddy(struct page *page, struct page *buddy,
509 if (!pfn_valid_within(page_to_pfn(buddy))) 509 if (!pfn_valid_within(page_to_pfn(buddy)))
510 return 0; 510 return 0;
511 511
512 if (page_zone_id(page) != page_zone_id(buddy))
513 return 0;
514
515 if (page_is_guard(buddy) && page_order(buddy) == order) { 512 if (page_is_guard(buddy) && page_order(buddy) == order) {
516 VM_BUG_ON_PAGE(page_count(buddy) != 0, buddy); 513 VM_BUG_ON_PAGE(page_count(buddy) != 0, buddy);
514
515 if (page_zone_id(page) != page_zone_id(buddy))
516 return 0;
517
517 return 1; 518 return 1;
518 } 519 }
519 520
520 if (PageBuddy(buddy) && page_order(buddy) == order) { 521 if (PageBuddy(buddy) && page_order(buddy) == order) {
521 VM_BUG_ON_PAGE(page_count(buddy) != 0, buddy); 522 VM_BUG_ON_PAGE(page_count(buddy) != 0, buddy);
523
524 /*
525 * zone check is done late to avoid uselessly
526 * calculating zone/node ids for pages that could
527 * never merge.
528 */
529 if (page_zone_id(page) != page_zone_id(buddy))
530 return 0;
531
522 return 1; 532 return 1;
523 } 533 }
524 return 0; 534 return 0;