Index: linux-2.6.16-rc3/fs/proc/task_mmu.c =================================================================== --- linux-2.6.16-rc3.orig/fs/proc/task_mmu.c 2006-02-12 16:27:25.000000000 -0800 +++ linux-2.6.16-rc3/fs/proc/task_mmu.c 2006-02-17 18:13:45.000000000 -0800 @@ -116,6 +116,7 @@ struct mem_size_stats unsigned long shared_dirty; unsigned long private_clean; unsigned long private_dirty; + unsigned long page_dirty; }; static int show_map_internal(struct seq_file *m, void *v, struct mem_size_stats *mss) @@ -180,13 +181,15 @@ static int show_map_internal(struct seq_ "Shared_Clean: %8lu kB\n" "Shared_Dirty: %8lu kB\n" "Private_Clean: %8lu kB\n" - "Private_Dirty: %8lu kB\n", + "Private_Dirty: %8lu kB\n" + "Page_Dirty: %8lu kB\n", (vma->vm_end - vma->vm_start) >> 10, mss->resident >> 10, mss->shared_clean >> 10, mss->shared_dirty >> 10, mss->private_clean >> 10, - mss->private_dirty >> 10); + mss->private_dirty >> 10, + mss->page_dirty >> 10); if (m->count < m->size) /* vma is copied successfully */ m->version = (vma != get_gate_vma(task))? vma->vm_start: 0; @@ -230,6 +233,8 @@ static void smaps_pte_range(struct vm_ar else mss->private_clean += PAGE_SIZE; } + if (PageDirty(page)) + mss->page_dirty += PAGE_SIZE; } while (pte++, addr += PAGE_SIZE, addr != end); pte_unmap_unlock(pte - 1, ptl); cond_resched();