diff options
Diffstat (limited to 'fs/proc/page.c')
| -rw-r--r-- | fs/proc/page.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/fs/proc/page.c b/fs/proc/page.c index 1e3187da1fed..7eee2d8b97d9 100644 --- a/fs/proc/page.c +++ b/fs/proc/page.c | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #include <linux/ksm.h> | 5 | #include <linux/ksm.h> |
| 6 | #include <linux/mm.h> | 6 | #include <linux/mm.h> |
| 7 | #include <linux/mmzone.h> | 7 | #include <linux/mmzone.h> |
| 8 | #include <linux/huge_mm.h> | ||
| 8 | #include <linux/proc_fs.h> | 9 | #include <linux/proc_fs.h> |
| 9 | #include <linux/seq_file.h> | 10 | #include <linux/seq_file.h> |
| 10 | #include <linux/hugetlb.h> | 11 | #include <linux/hugetlb.h> |
| @@ -121,9 +122,18 @@ u64 stable_page_flags(struct page *page) | |||
| 121 | * just checks PG_head/PG_tail, so we need to check PageLRU/PageAnon | 122 | * just checks PG_head/PG_tail, so we need to check PageLRU/PageAnon |
| 122 | * to make sure a given page is a thp, not a non-huge compound page. | 123 | * to make sure a given page is a thp, not a non-huge compound page. |
| 123 | */ | 124 | */ |
| 124 | else if (PageTransCompound(page) && (PageLRU(compound_head(page)) || | 125 | else if (PageTransCompound(page)) { |
| 125 | PageAnon(compound_head(page)))) | 126 | struct page *head = compound_head(page); |
| 126 | u |= 1 << KPF_THP; | 127 | |
| 128 | if (PageLRU(head) || PageAnon(head)) | ||
| 129 | u |= 1 << KPF_THP; | ||
| 130 | else if (is_huge_zero_page(head)) { | ||
| 131 | u |= 1 << KPF_ZERO_PAGE; | ||
| 132 | u |= 1 << KPF_THP; | ||
| 133 | } | ||
| 134 | } else if (is_zero_pfn(page_to_pfn(page))) | ||
| 135 | u |= 1 << KPF_ZERO_PAGE; | ||
| 136 | |||
| 127 | 137 | ||
| 128 | /* | 138 | /* |
| 129 | * Caveats on high order pages: page->_count will only be set | 139 | * Caveats on high order pages: page->_count will only be set |
