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.c9
1 files changed, 8 insertions, 1 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