]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 26 Aug 2019 16:30:36 +0000 (18:30 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 26 Aug 2019 16:30:36 +0000 (18:30 +0200)
added patches:
mm-page_owner-handle-thp-splits-correctly.patch

queue-4.19/mm-page_owner-handle-thp-splits-correctly.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/mm-page_owner-handle-thp-splits-correctly.patch b/queue-4.19/mm-page_owner-handle-thp-splits-correctly.patch
new file mode 100644 (file)
index 0000000..67bbed3
--- /dev/null
@@ -0,0 +1,54 @@
+From f7da677bc6e72033f0981b9d58b5c5d409fa641e Mon Sep 17 00:00:00 2001
+From: Vlastimil Babka <vbabka@suse.cz>
+Date: Sat, 24 Aug 2019 17:54:59 -0700
+Subject: mm, page_owner: handle THP splits correctly
+
+From: Vlastimil Babka <vbabka@suse.cz>
+
+commit f7da677bc6e72033f0981b9d58b5c5d409fa641e upstream.
+
+THP splitting path is missing the split_page_owner() call that
+split_page() has.
+
+As a result, split THP pages are wrongly reported in the page_owner file
+as order-9 pages.  Furthermore when the former head page is freed, the
+remaining former tail pages are not listed in the page_owner file at
+all.  This patch fixes that by adding the split_page_owner() call into
+__split_huge_page().
+
+Link: http://lkml.kernel.org/r/20190820131828.22684-2-vbabka@suse.cz
+Fixes: a9627bc5e34e ("mm/page_owner: introduce split_page_owner and replace manual handling")
+Reported-by: Kirill A. Shutemov <kirill@shutemov.name>
+Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
+Cc: Michal Hocko <mhocko@kernel.org>
+Cc: Mel Gorman <mgorman@techsingularity.net>
+Cc: Matthew Wilcox <willy@infradead.org>
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/huge_memory.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/mm/huge_memory.c
++++ b/mm/huge_memory.c
+@@ -33,6 +33,7 @@
+ #include <linux/page_idle.h>
+ #include <linux/shmem_fs.h>
+ #include <linux/oom.h>
++#include <linux/page_owner.h>
+ #include <asm/tlb.h>
+ #include <asm/pgalloc.h>
+@@ -2477,6 +2478,9 @@ static void __split_huge_page(struct pag
+       }
+       ClearPageCompound(head);
++
++      split_page_owner(head, HPAGE_PMD_ORDER);
++
+       /* See comment in __split_huge_page_tail() */
+       if (PageAnon(head)) {
+               /* Additional pin to radix tree of swap cache */
index 978dd2b892f643ddfbc86dbc90574d04f4b75caf..445f35b59f7796de387118ab2346b9274a3d23fa 100644 (file)
@@ -82,3 +82,4 @@ dm-zoned-improve-error-handling-in-reclaim.patch
 dm-zoned-improve-error-handling-in-i-o-map-code.patch
 dm-zoned-properly-handle-backing-device-failure.patch
 genirq-properly-pair-kobject_del-with-kobject_add.patch
+mm-page_owner-handle-thp-splits-correctly.patch