VmLck:         0 kB
   VmHWM:       476 kB
   VmRSS:       476 kB
+  RssAnon:             352 kB
+  RssFile:             120 kB
+  RssShmem:              4 kB
   VmData:      156 kB
   VmStk:        88 kB
   VmExe:        68 kB
  VmSize                      total program size
  VmLck                       locked memory size
  VmHWM                       peak resident set size ("high water mark")
- VmRSS                       size of memory portions
+ VmRSS                       size of memory portions. It contains the three
+                             following parts (VmRSS = RssAnon + RssFile + RssShmem)
+ RssAnon                     size of resident anonymous memory
+ RssFile                     size of resident file mappings
+ RssShmem                    size of resident shmem memory (includes SysV shm,
+                             mapping of tmpfs and shared anonymous mappings)
  VmData                      size of data, stack, and text segments
  VmStk                       size of data, stack, and text segments
  VmExe                       size of text segment
  Field    Content
  size     total program size (pages)           (same as VmSize in status)
  resident size of memory portions (pages)      (same as VmRSS in status)
- shared   number of pages that are shared      (i.e. backed by a file)
+ shared   number of pages that are shared      (i.e. backed by a file, same
+                                               as RssFile+RssShmem in status)
  trs      number of pages that are 'code'      (not including libs; broken,
                                                        includes data segment)
  lrs      number of pages of library           (always 0 on 2.6)
 
 
 void task_mem(struct seq_file *m, struct mm_struct *mm)
 {
-       unsigned long data, text, lib, swap, ptes, pmds;
+       unsigned long data, text, lib, swap, ptes, pmds, anon, file, shmem;
        unsigned long hiwater_vm, total_vm, hiwater_rss, total_rss;
 
+       anon = get_mm_counter(mm, MM_ANONPAGES);
+       file = get_mm_counter(mm, MM_FILEPAGES);
+       shmem = get_mm_counter(mm, MM_SHMEMPAGES);
+
        /*
         * Note: to minimize their overhead, mm maintains hiwater_vm and
         * hiwater_rss only when about to *lower* total_vm or rss.  Any
        hiwater_vm = total_vm = mm->total_vm;
        if (hiwater_vm < mm->hiwater_vm)
                hiwater_vm = mm->hiwater_vm;
-       hiwater_rss = total_rss = get_mm_rss(mm);
+       hiwater_rss = total_rss = anon + file + shmem;
        if (hiwater_rss < mm->hiwater_rss)
                hiwater_rss = mm->hiwater_rss;
 
                "VmPin:\t%8lu kB\n"
                "VmHWM:\t%8lu kB\n"
                "VmRSS:\t%8lu kB\n"
+               "RssAnon:\t%8lu kB\n"
+               "RssFile:\t%8lu kB\n"
+               "RssShmem:\t%8lu kB\n"
                "VmData:\t%8lu kB\n"
                "VmStk:\t%8lu kB\n"
                "VmExe:\t%8lu kB\n"
                mm->pinned_vm << (PAGE_SHIFT-10),
                hiwater_rss << (PAGE_SHIFT-10),
                total_rss << (PAGE_SHIFT-10),
+               anon << (PAGE_SHIFT-10),
+               file << (PAGE_SHIFT-10),
+               shmem << (PAGE_SHIFT-10),
                data << (PAGE_SHIFT-10),
                mm->stack_vm << (PAGE_SHIFT-10), text, lib,
                ptes >> 10,