summaryrefslogtreecommitdiffstats
path: root/lib/llist.c
diff options
context:
space:
mode:
authorDavid Rientjes <rientjes@google.com>2016-03-17 14:19:19 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2016-03-17 15:09:34 -0700
commitf9054c70d28bc214b2857cf8db8269f4f45a5e23 (patch)
tree2eaaa8b6363efd5a0da09764da38820aea4fcffe /lib/llist.c
parentb14a1ef58e8acb7fa64c1c8f745b21fd8a577aba (diff)
downloadop-kernel-dev-f9054c70d28bc214b2857cf8db8269f4f45a5e23.zip
op-kernel-dev-f9054c70d28bc214b2857cf8db8269f4f45a5e23.tar.gz
mm, mempool: only set __GFP_NOMEMALLOC if there are free elements
If an oom killed thread calls mempool_alloc(), it is possible that it'll loop forever if there are no elements on the freelist since __GFP_NOMEMALLOC prevents it from accessing needed memory reserves in oom conditions. Only set __GFP_NOMEMALLOC if there are elements on the freelist. If there are no free elements, allow allocations without the bit set so that memory reserves can be accessed if needed. Additionally, using mempool_alloc() with __GFP_NOMEMALLOC is not supported since the implementation can loop forever without accessing memory reserves when needed. Signed-off-by: David Rientjes <rientjes@google.com> Cc: Greg Thelen <gthelen@google.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'lib/llist.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud