|
@@ -1513,7 +1513,6 @@ failed:
|
|
|
#define ALLOC_HARDER 0x10 /* try to alloc harder */
|
|
|
#define ALLOC_HIGH 0x20 /* __GFP_HIGH set */
|
|
|
#define ALLOC_CPUSET 0x40 /* check for correct cpuset */
|
|
|
-#define ALLOC_PFMEMALLOC 0x80 /* Caller has PF_MEMALLOC set */
|
|
|
|
|
|
#ifdef CONFIG_FAIL_PAGE_ALLOC
|
|
|
|
|
@@ -2294,11 +2293,10 @@ gfp_to_alloc_flags(gfp_t gfp_mask)
|
|
|
} else if (unlikely(rt_task(current)) && !in_interrupt())
|
|
|
alloc_flags |= ALLOC_HARDER;
|
|
|
|
|
|
- if ((current->flags & PF_MEMALLOC) ||
|
|
|
- unlikely(test_thread_flag(TIF_MEMDIE))) {
|
|
|
- alloc_flags |= ALLOC_PFMEMALLOC;
|
|
|
-
|
|
|
- if (likely(!(gfp_mask & __GFP_NOMEMALLOC)) && !in_interrupt())
|
|
|
+ if (likely(!(gfp_mask & __GFP_NOMEMALLOC))) {
|
|
|
+ if (gfp_mask & __GFP_MEMALLOC)
|
|
|
+ alloc_flags |= ALLOC_NO_WATERMARKS;
|
|
|
+ else if (likely(!(gfp_mask & __GFP_NOMEMALLOC)) && !in_interrupt())
|
|
|
alloc_flags |= ALLOC_NO_WATERMARKS;
|
|
|
}
|
|
|
|
|
@@ -2307,7 +2305,7 @@ gfp_to_alloc_flags(gfp_t gfp_mask)
|
|
|
|
|
|
bool gfp_pfmemalloc_allowed(gfp_t gfp_mask)
|
|
|
{
|
|
|
- return !!(gfp_to_alloc_flags(gfp_mask) & ALLOC_PFMEMALLOC);
|
|
|
+ return !!(gfp_to_alloc_flags(gfp_mask) & ALLOC_NO_WATERMARKS);
|
|
|
}
|
|
|
|
|
|
static inline struct page *
|
|
@@ -2498,12 +2496,12 @@ nopage:
|
|
|
return page;
|
|
|
got_pg:
|
|
|
/*
|
|
|
- * page->pfmemalloc is set when the caller had PFMEMALLOC set or is
|
|
|
- * been OOM killed. The expectation is that the caller is taking
|
|
|
- * steps that will free more memory. The caller should avoid the
|
|
|
- * page being used for !PFMEMALLOC purposes.
|
|
|
+ * page->pfmemalloc is set when the caller had PFMEMALLOC set, is
|
|
|
+ * been OOM killed or specified __GFP_MEMALLOC. The expectation is
|
|
|
+ * that the caller is taking steps that will free more memory. The
|
|
|
+ * caller should avoid the page being used for !PFMEMALLOC purposes.
|
|
|
*/
|
|
|
- page->pfmemalloc = !!(alloc_flags & ALLOC_PFMEMALLOC);
|
|
|
+ page->pfmemalloc = !!(alloc_flags & ALLOC_NO_WATERMARKS);
|
|
|
|
|
|
if (kmemcheck_enabled)
|
|
|
kmemcheck_pagealloc_alloc(page, order, gfp_mask);
|