Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752094AbbDXAnE (ORCPT ); Thu, 23 Apr 2015 20:43:04 -0400 Received: from mx1.redhat.com ([209.132.183.28]:37729 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751924AbbDXAnA (ORCPT ); Thu, 23 Apr 2015 20:43:00 -0400 Message-ID: <55399189.5030608@redhat.com> Date: Thu, 23 Apr 2015 19:42:49 -0500 From: Dean Nelson User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 MIME-Version: 1.0 To: Naoya Horiguchi CC: Andrew Morton , Andi Kleen , "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] mm: soft-offline: fix num_poisoned_pages counting on concurrent events References: <1429589902-2765-1-git-send-email-n-horiguchi@ah.jp.nec.com> In-Reply-To: <1429589902-2765-1-git-send-email-n-horiguchi@ah.jp.nec.com> Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1962 Lines: 50 On 04/20/2015 11:18 PM, Naoya Horiguchi wrote: > If multiple soft offline events hit one free page/hugepage concurrently, > soft_offline_page() can handle the free page/hugepage multiple times, > which makes num_poisoned_pages counter increased more than once. > This patch fixes this wrong counting by checking TestSetPageHWPoison for > normal papes and by checking the return value of dequeue_hwpoisoned_huge_page() > for hugepages. > > Signed-off-by: Naoya Horiguchi Acked-by: Dean Nelson > Cc: stable@vger.kernel.org # v3.14+ > --- > # This problem might happen before 3.14, but it's rare and non-critical, > # so I want this patch to be backported to stable trees only if the patch > # cleanly applies (i.e. v3.14+). > --- > mm/memory-failure.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git v4.0.orig/mm/memory-failure.c v4.0/mm/memory-failure.c > index 2cc1d578144b..72a5224c8084 100644 > --- v4.0.orig/mm/memory-failure.c > +++ v4.0/mm/memory-failure.c > @@ -1721,12 +1721,12 @@ int soft_offline_page(struct page *page, int flags) > } else if (ret == 0) { /* for free pages */ > if (PageHuge(page)) { > set_page_hwpoison_huge_page(hpage); > - dequeue_hwpoisoned_huge_page(hpage); > - atomic_long_add(1 << compound_order(hpage), > + if (!dequeue_hwpoisoned_huge_page(hpage)) > + atomic_long_add(1 << compound_order(hpage), > &num_poisoned_pages); > } else { > - SetPageHWPoison(page); > - atomic_long_inc(&num_poisoned_pages); > + if (!TestSetPageHWPoison(page)) > + atomic_long_inc(&num_poisoned_pages); > } > } > unset_migratetype_isolate(page, MIGRATE_MOVABLE); > -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/