Commit 4c4c402d authored by Martin Hicks's avatar Martin Hicks Committed by Linus Torvalds

[PATCH] meminfo: add Cached underflow check

Working on some code lately I've been getting huge values for "Cached".
The cause is that get_page_cache_size() is an approximate value, and for a
sufficiently small returned value of get_page_cache_size() the value
underflows.
Signed-off-by: default avatarMartin Hicks <mort@sgi.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 76c3073a
...@@ -126,6 +126,7 @@ static int meminfo_read_proc(char *page, char **start, off_t off, ...@@ -126,6 +126,7 @@ static int meminfo_read_proc(char *page, char **start, off_t off,
unsigned long committed; unsigned long committed;
unsigned long allowed; unsigned long allowed;
struct vmalloc_info vmi; struct vmalloc_info vmi;
long cached;
get_page_state(&ps); get_page_state(&ps);
get_zone_counts(&active, &inactive, &free); get_zone_counts(&active, &inactive, &free);
...@@ -140,6 +141,10 @@ static int meminfo_read_proc(char *page, char **start, off_t off, ...@@ -140,6 +141,10 @@ static int meminfo_read_proc(char *page, char **start, off_t off,
allowed = ((totalram_pages - hugetlb_total_pages()) allowed = ((totalram_pages - hugetlb_total_pages())
* sysctl_overcommit_ratio / 100) + total_swap_pages; * sysctl_overcommit_ratio / 100) + total_swap_pages;
cached = get_page_cache_size() - total_swapcache_pages - i.bufferram;
if (cached < 0)
cached = 0;
get_vmalloc_info(&vmi); get_vmalloc_info(&vmi);
/* /*
...@@ -172,7 +177,7 @@ static int meminfo_read_proc(char *page, char **start, off_t off, ...@@ -172,7 +177,7 @@ static int meminfo_read_proc(char *page, char **start, off_t off,
K(i.totalram), K(i.totalram),
K(i.freeram), K(i.freeram),
K(i.bufferram), K(i.bufferram),
K(get_page_cache_size()-total_swapcache_pages-i.bufferram), K(cached),
K(total_swapcache_pages), K(total_swapcache_pages),
K(active), K(active),
K(inactive), K(inactive),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment