Fix potential endless loop in kswapd when compaction is not enabled
Rik van Riel [Sat, 24 Mar 2012 14:26:21 +0000 (10:26 -0400)]
We should only test compaction_suitable if the kernel is built with
CONFIG_COMPACTION, otherwise the stub compaction_suitable function will
always return COMPACT_SKIPPED and send kswapd into an infinite loop.

Reported-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Rik van Riel <riel@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

mm/vmscan.c

index 7658fd6..33c332b 100644 (file)
@@ -2946,7 +2946,8 @@ out:
                                continue;
 
                        /* Would compaction fail due to lack of free memory? */
-                       if (compaction_suitable(zone, order) == COMPACT_SKIPPED)
+                       if (COMPACTION_BUILD &&
+                           compaction_suitable(zone, order) == COMPACT_SKIPPED)
                                goto loop_again;
 
                        /* Confirm the zone is balanced for order-0 */