]> git.baikalelectronics.ru Git - kernel.git/commit
mm, page_alloc: prevent infinite loop in buffered_rmqueue()
authorVlastimil Babka <vbabka@suse.cz>
Fri, 3 Jun 2016 21:55:52 +0000 (14:55 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 3 Jun 2016 23:02:56 +0000 (16:02 -0700)
commit813b32712bf9fa4b33024b71544435e46203984b
tree7f780a66a7476fcd2410d6932b957c9e9dd0afa0
parent2682bb6d32ec8dff6a465da8ef7a8e12dbb1f578
mm, page_alloc: prevent infinite loop in buffered_rmqueue()

In DEBUG_VM kernel, we can hit infinite loop for order == 0 in
buffered_rmqueue() when check_new_pcp() returns 1, because the bad page
is never removed from the pcp list.  Fix this by removing the page
before retrying.  Also we don't need to check if page is non-NULL,
because we simply grab it from the list which was just tested for being
non-empty.

Fixes: b805630a4132 ("mm, page_alloc: defer debugging checks of pages allocated from the PCP")
Link: http://lkml.kernel.org/r/20160530090154.GM2527@techsingularity.net
Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: Mel Gorman <mgorman@techsingularity.net>
Reported-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/page_alloc.c