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.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index e2ef1c17942f..7e2fb6e38f34 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3922,6 +3922,7 @@ should_reclaim_retry(gfp_t gfp_mask, unsigned order,
3922{ 3922{
3923 struct zone *zone; 3923 struct zone *zone;
3924 struct zoneref *z; 3924 struct zoneref *z;
3925 bool ret = false;
3925 3926
3926 /* 3927 /*
3927 * Costly allocations might have made a progress but this doesn't mean 3928 * Costly allocations might have made a progress but this doesn't mean
@@ -3985,25 +3986,24 @@ should_reclaim_retry(gfp_t gfp_mask, unsigned order,
3985 } 3986 }
3986 } 3987 }
3987 3988
3988 /* 3989 ret = true;
3989 * Memory allocation/reclaim might be called from a WQ 3990 goto out;
3990 * context and the current implementation of the WQ
3991 * concurrency control doesn't recognize that
3992 * a particular WQ is congested if the worker thread is
3993 * looping without ever sleeping. Therefore we have to
3994 * do a short sleep here rather than calling
3995 * cond_resched().
3996 */
3997 if (current->flags & PF_WQ_WORKER)
3998 schedule_timeout_uninterruptible(1);
3999 else
4000 cond_resched();
4001
4002 return true;
4003 } 3991 }
4004 } 3992 }
4005 3993
4006 return false; 3994out:
3995 /*
3996 * Memory allocation/reclaim might be called from a WQ context and the
3997 * current implementation of the WQ concurrency control doesn't
3998 * recognize that a particular WQ is congested if the worker thread is
3999 * looping without ever sleeping. Therefore we have to do a short sleep
4000 * here rather than calling cond_resched().
4001 */
4002 if (current->flags & PF_WQ_WORKER)
4003 schedule_timeout_uninterruptible(1);
4004 else
4005 cond_resched();
4006 return ret;
4007} 4007}
4008 4008
4009static inline bool 4009static inline bool