It's a bug in the /proc code.  If buffercache pages exceed
pagecache pages, `pg_size' flips negative.
There doesn't seem to be any reason to subtract buffermem_pages
from page_cache_size - they're independent.
--- linux-2.4.14-pre8/fs/proc/proc_misc.c	Tue Oct 23 23:09:42 2001
+++ linux-akpm/fs/proc/proc_misc.c	Sun Nov  4 10:10:18 2001
@@ -140,7 +140,7 @@ static int meminfo_read_proc(char *page,
 {
 	struct sysinfo i;
 	int len;
-	int pg_size ;
+	unsigned int cached;
 
 /*
  * display in kilobytes.
@@ -149,14 +149,14 @@ static int meminfo_read_proc(char *page,
 #define B(x) ((unsigned long long)(x) << PAGE_SHIFT)
 	si_meminfo(&i);
 	si_swapinfo(&i);
-	pg_size = atomic_read(&page_cache_size) - i.bufferram ;
+	cached = atomic_read(&page_cache_size);
 
 	len = sprintf(page, "        total:    used:    free:  shared: buffers:  cached:\n"
 		"Mem:  %8Lu %8Lu %8Lu %8Lu %8Lu %8Lu\n"
 		"Swap: %8Lu %8Lu %8Lu\n",
 		B(i.totalram), B(i.totalram-i.freeram), B(i.freeram),
 		B(i.sharedram), B(i.bufferram),
-		B(pg_size), B(i.totalswap),
+		B(cached), B(i.totalswap),
 		B(i.totalswap-i.freeswap), B(i.freeswap));
 	/*
 	 * Tagged format, for easy grepping and expansion.
@@ -182,7 +182,7 @@ static int meminfo_read_proc(char *page,
 		K(i.freeram),
 		K(i.sharedram),
 		K(i.bufferram),
-		K(pg_size - swapper_space.nrpages),
+		K(cached - swapper_space.nrpages),
 		K(swapper_space.nrpages),
 		K(nr_active_pages),
 		K(nr_inactive_pages),
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/