aboutsummaryrefslogtreecommitdiffstats
path: root/mm/page_alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/page_alloc.c')
-rw-r--r--mm/page_alloc.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 578236089ec1..18cee0d4c8a2 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2639,14 +2639,6 @@ rebalance:
2639 goto got_pg; 2639 goto got_pg;
2640 2640
2641 /* 2641 /*
2642 * It can become very expensive to allocate transparent hugepages at
2643 * fault, so use asynchronous memory compaction for THP unless it is
2644 * khugepaged trying to collapse.
2645 */
2646 if (!(gfp_mask & __GFP_NO_KSWAPD) || (current->flags & PF_KTHREAD))
2647 migration_mode = MIGRATE_SYNC_LIGHT;
2648
2649 /*
2650 * If compaction is deferred for high-order allocations, it is because 2642 * If compaction is deferred for high-order allocations, it is because
2651 * sync compaction recently failed. In this is the case and the caller 2643 * sync compaction recently failed. In this is the case and the caller
2652 * requested a movable allocation that does not heavily disrupt the 2644 * requested a movable allocation that does not heavily disrupt the
@@ -2656,6 +2648,15 @@ rebalance:
2656 (gfp_mask & __GFP_NO_KSWAPD)) 2648 (gfp_mask & __GFP_NO_KSWAPD))
2657 goto nopage; 2649 goto nopage;
2658 2650
2651 /*
2652 * It can become very expensive to allocate transparent hugepages at
2653 * fault, so use asynchronous memory compaction for THP unless it is
2654 * khugepaged trying to collapse.
2655 */
2656 if ((gfp_mask & GFP_TRANSHUGE) != GFP_TRANSHUGE ||
2657 (current->flags & PF_KTHREAD))
2658 migration_mode = MIGRATE_SYNC_LIGHT;
2659
2659 /* Try direct reclaim and then allocating */ 2660 /* Try direct reclaim and then allocating */
2660 page = __alloc_pages_direct_reclaim(gfp_mask, order, 2661 page = __alloc_pages_direct_reclaim(gfp_mask, order,
2661 zonelist, high_zoneidx, 2662 zonelist, high_zoneidx,