A race condition starts to be visible in recent mmotm, where a PG_hwpoison flag is set on a migration source page *before* it's back in buddy page pool. This is problematic because no page flag is supposed to be set when freeing (see __free_one_page().) So the user-visible effect of this race is that it could trigger the BUG_ON() when soft-offlining is called. The root cause is that we call lru_add_drain_all() to make sure that the page is in buddy, but that doesn't work because this function just schedules a work item and doesn't wait its completion. drain_all_pages() does draining directly, so simply dropping lru_add_drain_all() solves this problem. Fixes: commit f15bdfa802bf ("mm/memory-failure.c: fix memory leak in successful soft offlining") Signed-off-by: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx> Cc: <stable@xxxxxxxxxxxxxxx> [3.11+] --- mm/memory-failure.c | 2 -- 1 file changed, 2 deletions(-) diff --git mmotm-2015-02-03-16-38.orig/mm/memory-failure.c mmotm-2015-02-03-16-38/mm/memory-failure.c index b2a68bde8058..fa44054c205f 100644 --- mmotm-2015-02-03-16-38.orig/mm/memory-failure.c +++ mmotm-2015-02-03-16-38/mm/memory-failure.c @@ -1647,8 +1647,6 @@ static int __soft_offline_page(struct page *page, int flags) * setting PG_hwpoison. */ if (!is_free_buddy_page(page)) - lru_add_drain_all(); - if (!is_free_buddy_page(page)) drain_all_pages(page_zone(page)); SetPageHWPoison(page); if (!is_free_buddy_page(page)) -- 1.9.3 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href