]> git.baikalelectronics.ru Git - kernel.git/commit
Revert "revert "Revert "mm: remove __GFP_NO_KSWAPD""" and associated damage
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 10 Dec 2012 18:51:16 +0000 (10:51 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 10 Dec 2012 19:03:05 +0000 (11:03 -0800)
commitc5980e702862cefeb2f6e25502c0351c05751959
treef6e62f0a4427c2ba860ad8cd40a31e50be29de15
parent055428e8026ba3b541bf1f6250b7c953c9320304
Revert "revert "Revert "mm: remove __GFP_NO_KSWAPD""" and associated damage

This reverts commits f547322f3f7a0c695cf58aa733b7bdaaaa412a33 and
58b1539d48585bda248391e57da5aa4c67e68038.

This is a revert of a revert of a revert.  In addition, it reverts the
even older i915 change to stop using the __GFP_NO_KSWAPD flag due to the
original commits in linux-next.

It turns out that the original patch really was bogus, and that the
original revert was the correct thing to do after all.  We thought we
had fixed the problem, and then reverted the revert, but the problem
really is fundamental: waking up kswapd simply isn't the right thing to
do, and direct reclaim sometimes simply _is_ the right thing to do.

When certain allocations fail, we simply should try some direct reclaim,
and if that fails, fail the allocation.  That's the right thing to do
for THP allocations, which can easily fail, and the GPU allocations want
to do that too.

So starting kswapd is sometimes simply wrong, and removing the flag that
said "don't start kswapd" was a mistake.  Let's hope we never revisit
this mistake again - and certainly not this many times ;)

Acked-by: Mel Gorman <mgorman@suse.de>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Cc: Rik van Riel <riel@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/gpu/drm/i915/i915_gem.c
drivers/mtd/mtdcore.c
include/linux/gfp.h
include/trace/events/gfpflags.h
mm/page_alloc.c