diff options
author | Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> | 2016-03-17 17:17:41 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-03-17 18:09:34 -0400 |
commit | 832fc1de01aea28255cb11d270679b7f1273f0d7 (patch) | |
tree | ef020cb2a44d1fee4df1359fbb3fc11a08de733b /fs | |
parent | 12580e4b54ba8a1b22ec977c200be0174ca42348 (diff) |
/proc/kpageflags: return KPF_BUDDY for "tail" buddy pages
Currently /proc/kpageflags returns nothing for "tail" buddy pages, which
is inconvenient when grasping how free pages are distributed. This
patch sets KPF_BUDDY for such pages.
With this patch:
$ grep MemFree /proc/meminfo ; tools/vm/page-types -b buddy
MemFree: 3134992 kB
flags page-count MB symbolic-flags long-symbolic-flags
0x0000000000000400 779272 3044 __________B_______________________________ buddy
0x0000000000000c00 4385 17 __________BM______________________________ buddy,mmap
total 783657 3061
783657 pages is 3134628 kB (roughly consistent with the global counter,)
so it's OK.
[akpm@linux-foundation.org: update comment, per Naoya]
Signed-off-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Reviewed-by: Vladimir Davydov <vdavydov@virtuozzo.com>>
Cc: Konstantin Khlebnikov <koct9i@gmail.com>
Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/proc/page.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/fs/proc/page.c b/fs/proc/page.c index b2855eea5405..0be626d85331 100644 --- a/fs/proc/page.c +++ b/fs/proc/page.c | |||
@@ -103,9 +103,9 @@ u64 stable_page_flags(struct page *page) | |||
103 | * pseudo flags for the well known (anonymous) memory mapped pages | 103 | * pseudo flags for the well known (anonymous) memory mapped pages |
104 | * | 104 | * |
105 | * Note that page->_mapcount is overloaded in SLOB/SLUB/SLQB, so the | 105 | * Note that page->_mapcount is overloaded in SLOB/SLUB/SLQB, so the |
106 | * simple test in page_mapcount() is not enough. | 106 | * simple test in page_mapped() is not enough. |
107 | */ | 107 | */ |
108 | if (!PageSlab(page) && page_mapcount(page)) | 108 | if (!PageSlab(page) && page_mapped(page)) |
109 | u |= 1 << KPF_MMAP; | 109 | u |= 1 << KPF_MMAP; |
110 | if (PageAnon(page)) | 110 | if (PageAnon(page)) |
111 | u |= 1 << KPF_ANON; | 111 | u |= 1 << KPF_ANON; |
@@ -148,6 +148,8 @@ u64 stable_page_flags(struct page *page) | |||
148 | */ | 148 | */ |
149 | if (PageBuddy(page)) | 149 | if (PageBuddy(page)) |
150 | u |= 1 << KPF_BUDDY; | 150 | u |= 1 << KPF_BUDDY; |
151 | else if (page_count(page) == 0 && is_free_buddy_page(page)) | ||
152 | u |= 1 << KPF_BUDDY; | ||
151 | 153 | ||
152 | if (PageBalloon(page)) | 154 | if (PageBalloon(page)) |
153 | u |= 1 << KPF_BALLOON; | 155 | u |= 1 << KPF_BALLOON; |