aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYongkai Wu <[email protected]>2018-12-14 14:17:10 -0800
committerLinus Torvalds <[email protected]>2018-12-14 15:05:45 -0800
commit8ace22bce84014957da37e6b8baa49ee81c03366 (patch)
tree3923e3622950039abbb6318349b2c693d0218289
parentf5a222dc2f0e893cc6b0fa34d421a41ca7dfb72e (diff)
hugetlbfs: call VM_BUG_ON_PAGE earlier in free_huge_page()
A stack trace was triggered by VM_BUG_ON_PAGE(page_mapcount(page), page) in free_huge_page(). Unfortunately, the page->mapping field was set to NULL before this test. This made it more difficult to determine the root cause of the problem. Move the VM_BUG_ON_PAGE tests earlier in the function so that if they do trigger more information is present in the page struct. Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Yongkai Wu <[email protected]> Acked-by: Michal Hocko <[email protected]> Acked-by: Mike Kravetz <[email protected]> Reviewed-by: William Kucharski <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
-rw-r--r--mm/hugetlb.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 705a3e9cc910..a80832487981 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1248,10 +1248,11 @@ void free_huge_page(struct page *page)
(struct hugepage_subpool *)page_private(page);
bool restore_reserve;
- set_page_private(page, 0);
- page->mapping = NULL;
VM_BUG_ON_PAGE(page_count(page), page);
VM_BUG_ON_PAGE(page_mapcount(page), page);
+
+ set_page_private(page, 0);
+ page->mapping = NULL;
restore_reserve = PagePrivate(page);
ClearPagePrivate(page);