From 911b7bd61395d4a1715a0d383b83955ec5b52922 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sun, 21 Aug 2016 23:05:18 +0200 Subject: [PATCH] 4.4-stable patches added patches: hugetlb-fix-nr_pmds-accounting-with-shared-page-tables.patch --- queue-3.14/series | 0 ...s-accounting-with-shared-page-tables.patch | 56 +++++++++++++++++++ queue-4.4/series | 1 + queue-4.7/series | 0 4 files changed, 57 insertions(+) create mode 100644 queue-3.14/series create mode 100644 queue-4.4/hugetlb-fix-nr_pmds-accounting-with-shared-page-tables.patch create mode 100644 queue-4.4/series create mode 100644 queue-4.7/series diff --git a/queue-3.14/series b/queue-3.14/series new file mode 100644 index 00000000000..e69de29bb2d diff --git a/queue-4.4/hugetlb-fix-nr_pmds-accounting-with-shared-page-tables.patch b/queue-4.4/hugetlb-fix-nr_pmds-accounting-with-shared-page-tables.patch new file mode 100644 index 00000000000..f106823fa20 --- /dev/null +++ b/queue-4.4/hugetlb-fix-nr_pmds-accounting-with-shared-page-tables.patch @@ -0,0 +1,56 @@ +From c17b1f42594eb71b8d3eb5a6dfc907a7eb88a51d Mon Sep 17 00:00:00 2001 +From: "Kirill A. Shutemov" +Date: Fri, 24 Jun 2016 14:49:51 -0700 +Subject: hugetlb: fix nr_pmds accounting with shared page tables + +From: Kirill A. Shutemov + +commit c17b1f42594eb71b8d3eb5a6dfc907a7eb88a51d upstream. + +We account HugeTLB's shared page table to all processes who share it. +The accounting happens during huge_pmd_share(). + +If somebody populates pud entry under us, we should decrease pagetable's +refcount and decrease nr_pmds of the process. + +By mistake, I increase nr_pmds again in this case. :-/ It will lead to +"BUG: non-zero nr_pmds on freeing mm: 2" on process' exit. + +Let's fix this by increasing nr_pmds only when we're sure that the page +table will be used. + +Link: http://lkml.kernel.org/r/20160617122506.GC6534@node.shutemov.name +Fixes: dc6c9a35b66b ("mm: account pmd page tables to the process") +Signed-off-by: Kirill A. Shutemov +Reported-by: zhongjiang +Reviewed-by: Mike Kravetz +Acked-by: Michal Hocko +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + mm/hugetlb.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/mm/hugetlb.c ++++ b/mm/hugetlb.c +@@ -4213,7 +4213,6 @@ pte_t *huge_pmd_share(struct mm_struct * + if (saddr) { + spte = huge_pte_offset(svma->vm_mm, saddr); + if (spte) { +- mm_inc_nr_pmds(mm); + get_page(virt_to_page(spte)); + break; + } +@@ -4228,9 +4227,9 @@ pte_t *huge_pmd_share(struct mm_struct * + if (pud_none(*pud)) { + pud_populate(mm, pud, + (pmd_t *)((unsigned long)spte & PAGE_MASK)); ++ mm_inc_nr_pmds(mm); + } else { + put_page(virt_to_page(spte)); +- mm_inc_nr_pmds(mm); + } + spin_unlock(ptl); + out: diff --git a/queue-4.4/series b/queue-4.4/series new file mode 100644 index 00000000000..6a2be4da5f5 --- /dev/null +++ b/queue-4.4/series @@ -0,0 +1 @@ +hugetlb-fix-nr_pmds-accounting-with-shared-page-tables.patch diff --git a/queue-4.7/series b/queue-4.7/series new file mode 100644 index 00000000000..e69de29bb2d -- 2.47.3