]> 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)
commita6b244347832b222fe09490a854750fe654bbec3
treef6e62f0a4427c2ba860ad8cd40a31e50be29de15
parentd0e6372ad41f5de1269d47d326469b34c73f20bb
Revert "revert "Revert "mm: remove __GFP_NO_KSWAPD""" and associated damage

This reverts commits db8e08983eddf069e1f92b13a05cbeb2846e286b and
8dd5e2fefba49127c71eabe84cb13f387dba40b8.

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