aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-rw-r--r--mm/page_alloc.c9
-rw-r--r--mm/vmscan.c4
2 files changed, 10 insertions, 3 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index e3fb290194c0..3ede25e6686e 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2624,10 +2624,17 @@ retry_cpuset:
2624 page = get_page_from_freelist(gfp_mask|__GFP_HARDWALL, nodemask, order, 2624 page = get_page_from_freelist(gfp_mask|__GFP_HARDWALL, nodemask, order,
2625 zonelist, high_zoneidx, alloc_flags, 2625 zonelist, high_zoneidx, alloc_flags,
2626 preferred_zone, migratetype); 2626 preferred_zone, migratetype);
2627 if (unlikely(!page)) 2627 if (unlikely(!page)) {
2628 /*
2629 * Runtime PM, block IO and its error handling path
2630 * can deadlock because I/O on the device might not
2631 * complete.
2632 */
2633 gfp_mask = memalloc_noio_flags(gfp_mask);
2628 page = __alloc_pages_slowpath(gfp_mask, order, 2634 page = __alloc_pages_slowpath(gfp_mask, order,
2629 zonelist, high_zoneidx, nodemask, 2635 zonelist, high_zoneidx, nodemask,
2630 preferred_zone, migratetype); 2636 preferred_zone, migratetype);
2637 }
2631 2638
2632 trace_mm_page_alloc(page, order, gfp_mask, migratetype); 2639 trace_mm_page_alloc(page, order, gfp_mask, migratetype);
2633 2640
diff --git a/mm/vmscan.c b/mm/vmscan.c
index b93968b71dc6..a68fa20269d9 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2352,7 +2352,7 @@ unsigned long try_to_free_pages(struct zonelist *zonelist, int order,
2352{ 2352{
2353 unsigned long nr_reclaimed; 2353 unsigned long nr_reclaimed;
2354 struct scan_control sc = { 2354 struct scan_control sc = {
2355 .gfp_mask = gfp_mask, 2355 .gfp_mask = (gfp_mask = memalloc_noio_flags(gfp_mask)),
2356 .may_writepage = !laptop_mode, 2356 .may_writepage = !laptop_mode,
2357 .nr_to_reclaim = SWAP_CLUSTER_MAX, 2357 .nr_to_reclaim = SWAP_CLUSTER_MAX,
2358 .may_unmap = 1, 2358 .may_unmap = 1,
@@ -3313,7 +3313,7 @@ static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
3313 .may_unmap = !!(zone_reclaim_mode & RECLAIM_SWAP), 3313 .may_unmap = !!(zone_reclaim_mode & RECLAIM_SWAP),
3314 .may_swap = 1, 3314 .may_swap = 1,
3315 .nr_to_reclaim = max(nr_pages, SWAP_CLUSTER_MAX), 3315 .nr_to_reclaim = max(nr_pages, SWAP_CLUSTER_MAX),
3316 .gfp_mask = gfp_mask, 3316 .gfp_mask = (gfp_mask = memalloc_noio_flags(gfp_mask)),
3317 .order = order, 3317 .order = order,
3318 .priority = ZONE_RECLAIM_PRIORITY, 3318 .priority = ZONE_RECLAIM_PRIORITY,
3319 }; 3319 };