The patch titled Subject: hwpoison, hugetlbfs: fix warning on freeing hwpoisoned hugepage has been added to the -mm tree. Its filename is hwpoison-hugetlbfs-fix-warning-on-freeing-hwpoisoned-hugepage.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx> Subject: hwpoison, hugetlbfs: fix warning on freeing hwpoisoned hugepage Fix the warning from __list_del_entry() which is triggered when a process tries to do free_huge_page() for a hwpoisoned hugepage. Originally, page->lru of hugetlbfs head page was dangling when the hugepage was in use. This behavior has changed by commit 0edaecfab218d7 ("hugetlb: add a list for tracking in-use HugeTLB pages"), where hugepages in use are linked to hugepage_activelist. HWpoisoned hugepages should not be charged to any process, so we introduce another list to link hwpoisoned hugepages. Signed-off-by: Naoya Horiguchi <n-horiguchi@xxxxxxxxxxxxx> Cc: Andi Kleen <andi.kleen@xxxxxxxxx> Cc: Tony Luck <tony.luck@xxxxxxxxx> Cc: Wu Fengguang <fengguang.wu@xxxxxxxxx> Cc: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/hugetlb.h | 3 +++ mm/hugetlb.c | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff -puN include/linux/hugetlb.h~hwpoison-hugetlbfs-fix-warning-on-freeing-hwpoisoned-hugepage include/linux/hugetlb.h --- a/include/linux/hugetlb.h~hwpoison-hugetlbfs-fix-warning-on-freeing-hwpoisoned-hugepage +++ a/include/linux/hugetlb.h @@ -237,6 +237,9 @@ struct hstate { unsigned long nr_overcommit_huge_pages; struct list_head hugepage_activelist; struct list_head hugepage_freelists[MAX_NUMNODES]; +#ifdef CONFIG_MEMORY_FAILURE + struct list_head hugepage_hwpoisonedlist; +#endif unsigned int nr_huge_pages_node[MAX_NUMNODES]; unsigned int free_huge_pages_node[MAX_NUMNODES]; unsigned int surplus_huge_pages_node[MAX_NUMNODES]; diff -puN mm/hugetlb.c~hwpoison-hugetlbfs-fix-warning-on-freeing-hwpoisoned-hugepage mm/hugetlb.c --- a/mm/hugetlb.c~hwpoison-hugetlbfs-fix-warning-on-freeing-hwpoisoned-hugepage +++ a/mm/hugetlb.c @@ -1939,6 +1939,7 @@ void __init hugetlb_add_hstate(unsigned for (i = 0; i < MAX_NUMNODES; ++i) INIT_LIST_HEAD(&h->hugepage_freelists[i]); INIT_LIST_HEAD(&h->hugepage_activelist); + INIT_LIST_HEAD(&h->hugepage_hwpoisonedlist); h->next_nid_to_alloc = first_node(node_states[N_MEMORY]); h->next_nid_to_free = first_node(node_states[N_MEMORY]); snprintf(h->name, HSTATE_NAME_LEN, "hugepages-%lukB", @@ -3176,7 +3177,7 @@ int dequeue_hwpoisoned_huge_page(struct spin_lock(&hugetlb_lock); if (is_hugepage_on_freelist(hpage)) { - list_del(&hpage->lru); + list_move(&hpage->lru, &h->hugepage_hwpoisonedlist); set_page_refcounted(hpage); h->free_huge_pages--; h->free_huge_pages_node[nid]--; _ Patches currently in -mm which might be from n-horiguchi@xxxxxxxxxxxxx are hwpoison-fix-action_result-to-print-out-dirty-clean.patch mm-print-out-information-of-file-affected-by-memory-error.patch hwpoison-hugetlbfs-fix-warning-on-freeing-hwpoisoned-hugepage.patch hwpoison-hugetlbfs-fix-bad-pmd-warning-in-unmapping-hwpoisoned-hugepage.patch hwpoison-hugetlbfs-fix-rss-counter-warning.patch hwpoison-hugetlbfs-fix-rss-counter-warning-fix.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html