diff options
-rw-r--r-- | include/linux/page-flags.h | 7 | ||||
-rw-r--r-- | mm/page_alloc.c | 2 |
2 files changed, 7 insertions, 2 deletions
diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 6b052aa7b5b7..a61e06e5fbce 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -371,10 +371,15 @@ PAGEFLAG(Idle, idle, PF_ANY) #define PAGE_MAPPING_KSM 2 #define PAGE_MAPPING_FLAGS (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM) +static __always_inline int PageAnonHead(struct page *page) +{ + return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0; +} + static __always_inline int PageAnon(struct page *page) { page = compound_head(page); - return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0; + return PageAnonHead(page); } #ifdef CONFIG_KSM diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 087ba3e417ec..7be1ce8b6be0 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1048,7 +1048,7 @@ static bool free_pages_prepare(struct page *page, unsigned int order) bad += free_pages_check(page + i); } } - if (PageAnon(page)) + if (PageAnonHead(page)) page->mapping = NULL; bad += free_pages_check(page); if (bad) |