Skip to content

Commit 09612fa

Browse files
Naoya Horiguchitorvalds
authored andcommitted
mm: hugetlb: return immediately for hugetlb page in __delete_from_page_cache()
We avoid calling __mod_node_page_state(NR_FILE_PAGES) for hugetlb page now, but it's not enough because later code doesn't handle hugetlb properly. Actually in our testing, WARN_ON_ONCE(PageDirty(page)) at the end of this function fires for hugetlb, which makes no sense. So we should return immediately for hugetlb pages. Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Naoya Horiguchi <[email protected]> Cc: Michal Hocko <[email protected]> Cc: "Aneesh Kumar K.V" <[email protected]> Cc: Anshuman Khandual <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
1 parent 243abd5 commit 09612fa

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

mm/filemap.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -239,14 +239,16 @@ void __delete_from_page_cache(struct page *page, void *shadow)
239239
/* Leave page->index set: truncation lookup relies upon it */
240240

241241
/* hugetlb pages do not participate in page cache accounting. */
242-
if (!PageHuge(page))
243-
__mod_node_page_state(page_pgdat(page), NR_FILE_PAGES, -nr);
242+
if (PageHuge(page))
243+
return;
244+
245+
__mod_node_page_state(page_pgdat(page), NR_FILE_PAGES, -nr);
244246
if (PageSwapBacked(page)) {
245247
__mod_node_page_state(page_pgdat(page), NR_SHMEM, -nr);
246248
if (PageTransHuge(page))
247249
__dec_node_page_state(page, NR_SHMEM_THPS);
248250
} else {
249-
VM_BUG_ON_PAGE(PageTransHuge(page) && !PageHuge(page), page);
251+
VM_BUG_ON_PAGE(PageTransHuge(page), page);
250252
}
251253

252254
/*

0 commit comments

Comments
 (0)