From: William Lee Irwin III <wli@holomorphy.com>

Account reserved memory properly as per acahalan's speecified semantics.

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/fs/proc/task_mmu.c    |    2 +-
 25-akpm/include/linux/sched.h |    2 +-
 25-akpm/mm/mmap.c             |    2 ++
 3 files changed, 4 insertions(+), 2 deletions(-)

diff -puN fs/proc/task_mmu.c~task-statm-reserved-fix fs/proc/task_mmu.c
--- 25/fs/proc/task_mmu.c~task-statm-reserved-fix	2004-08-25 00:33:54.032596216 -0700
+++ 25-akpm/fs/proc/task_mmu.c	2004-08-25 00:33:54.039595152 -0700
@@ -19,7 +19,7 @@ char *task_mem(struct mm_struct *mm, cha
 		"VmStk:\t%8lu kB\n"
 		"VmExe:\t%8lu kB\n"
 		"VmLib:\t%8lu kB\n",
-		mm->total_vm << (PAGE_SHIFT-10),
+		(mm->total_vm - mm->reserved_vm) << (PAGE_SHIFT-10),
 		mm->locked_vm << (PAGE_SHIFT-10),
 		mm->rss << (PAGE_SHIFT-10),
 		data << (PAGE_SHIFT-10),
diff -puN include/linux/sched.h~task-statm-reserved-fix include/linux/sched.h
--- 25/include/linux/sched.h~task-statm-reserved-fix	2004-08-25 00:33:54.034595912 -0700
+++ 25-akpm/include/linux/sched.h	2004-08-25 00:33:54.040595000 -0700
@@ -226,7 +226,7 @@ struct mm_struct {
 	unsigned long start_brk, brk, start_stack;
 	unsigned long arg_start, arg_end, env_start, env_end;
 	unsigned long rlimit_rss, rss, total_vm, locked_vm, shared_vm;
-	unsigned long exec_vm, stack_vm, def_flags;
+	unsigned long exec_vm, stack_vm, reserved_vm, def_flags;
 
 	unsigned long saved_auxv[40]; /* for /proc/PID/auxv */
 
diff -puN mm/mmap.c~task-statm-reserved-fix mm/mmap.c
--- 25/mm/mmap.c~task-statm-reserved-fix	2004-08-25 00:33:54.036595608 -0700
+++ 25-akpm/mm/mmap.c	2004-08-25 00:33:54.042594696 -0700
@@ -750,6 +750,8 @@ void __vm_stat_account(struct mm_struct 
 		mm->stack_vm += pages;
 	if (flags & VM_EXEC)
 		mm->exec_vm += pages;
+	if (flags & (VM_RESERVED|VM_IO))
+		mm->reserved_vm += pages;
 }
 #endif /* CONFIG_PROC_FS */
 
_