|
@@ -2447,7 +2447,7 @@ static inline int
|
|
|
gfp_to_alloc_flags(gfp_t gfp_mask)
|
|
|
{
|
|
|
int alloc_flags = ALLOC_WMARK_MIN | ALLOC_CPUSET;
|
|
|
- const gfp_t wait = gfp_mask & __GFP_WAIT;
|
|
|
+ const bool atomic = !(gfp_mask & (__GFP_WAIT | __GFP_NO_KSWAPD));
|
|
|
|
|
|
/* __GFP_HIGH is assumed to be the same as ALLOC_HIGH to save a branch. */
|
|
|
BUILD_BUG_ON(__GFP_HIGH != (__force gfp_t) ALLOC_HIGH);
|
|
@@ -2456,20 +2456,20 @@ gfp_to_alloc_flags(gfp_t gfp_mask)
|
|
|
* The caller may dip into page reserves a bit more if the caller
|
|
|
* cannot run direct reclaim, or if the caller has realtime scheduling
|
|
|
* policy or is asking for __GFP_HIGH memory. GFP_ATOMIC requests will
|
|
|
- * set both ALLOC_HARDER (!wait) and ALLOC_HIGH (__GFP_HIGH).
|
|
|
+ * set both ALLOC_HARDER (atomic == true) and ALLOC_HIGH (__GFP_HIGH).
|
|
|
*/
|
|
|
alloc_flags |= (__force int) (gfp_mask & __GFP_HIGH);
|
|
|
|
|
|
- if (!wait) {
|
|
|
+ if (atomic) {
|
|
|
/*
|
|
|
- * Not worth trying to allocate harder for
|
|
|
- * __GFP_NOMEMALLOC even if it can't schedule.
|
|
|
+ * Not worth trying to allocate harder for __GFP_NOMEMALLOC even
|
|
|
+ * if it can't schedule.
|
|
|
*/
|
|
|
- if (!(gfp_mask & __GFP_NOMEMALLOC))
|
|
|
+ if (!(gfp_mask & __GFP_NOMEMALLOC))
|
|
|
alloc_flags |= ALLOC_HARDER;
|
|
|
/*
|
|
|
- * Ignore cpuset if GFP_ATOMIC (!wait) rather than fail alloc.
|
|
|
- * See also cpuset_zone_allowed() comment in kernel/cpuset.c.
|
|
|
+ * Ignore cpuset mems for GFP_ATOMIC rather than fail, see the
|
|
|
+ * comment for __cpuset_node_allowed_softwall().
|
|
|
*/
|
|
|
alloc_flags &= ~ALLOC_CPUSET;
|
|
|
} else if (unlikely(rt_task(current)) && !in_interrupt())
|