Messages in this thread | | | Date | Fri, 6 Nov 2015 12:34:43 +0200 | From | "Kirill A. Shutemov" <> | Subject | Re: [PATCH v2] mm: hwpoison: adjust for new thp refcounting |
| |
On Fri, Nov 06, 2015 at 05:03:12PM +0900, Naoya Horiguchi wrote: > Some mm-related BUG_ON()s could trigger from hwpoison code due to recent > changes in thp refcounting rule. This patch fixes them up. > > In the new refcounting, we no longer use tail->_mapcount to keep tail's > refcount, and thereby we can simplify get/put_hwpoison_page(). > > And another change is that tail's refcount is not transferred to the raw > page during thp split (more precisely, in new rule we don't take refcount > on tail page any more.) So when we need thp split, we have to transfer the > refcount properly to the 4kB soft-offlined page before migration. > > thp split code goes into core code only when precheck (total_mapcount(head) > == page_count(head) - 1) passes to avoid useless split, where we assume that > one refcount is held by the caller of thp split and the others are taken > via mapping. To meet this assumption, this patch moves thp split part in > soft_offline_page() after get_any_page(). > > Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> > --- > ChangeLog v1->v2: > - leave put_hwpoison_page() as a macro > > - based on mmotm-2015-10-21-14-41 + Kirill's "[PATCH 0/4] Bugfixes for THP > refcounting" series. > --- > include/linux/mm.h | 1 + > mm/memory-failure.c | 75 +++++++++++++++------------------------------------ > 2 files changed, 23 insertions(+), 53 deletions(-) > > diff --git mmotm-2015-10-21-14-41/include/linux/mm.h mmotm-2015-10-21-14-41_patched/include/linux/mm.h > index a36f9fa..51e3ffe 100644 > --- mmotm-2015-10-21-14-41/include/linux/mm.h > +++ mmotm-2015-10-21-14-41_patched/include/linux/mm.h > @@ -2173,6 +2173,7 @@ extern int memory_failure(unsigned long pfn, int trapno, int flags); > extern void memory_failure_queue(unsigned long pfn, int trapno, int flags); > extern int unpoison_memory(unsigned long pfn); > extern int get_hwpoison_page(struct page *page); > +#define put_hwpoison_page(page) put_page(page) > extern void put_hwpoison_page(struct page *page);
This line should be removed.
Otherwise looks good to me.
Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
-- Kirill A. Shutemov
| |