#define PSS_SHIFT 12
 
 #ifdef CONFIG_PROC_PAGE_MONITOR
-struct mem_size_stats
-{
+struct mem_size_stats {
        struct vm_area_struct *vma;
        unsigned long resident;
        unsigned long shared_clean;
        unsigned long private_clean;
        unsigned long private_dirty;
        unsigned long referenced;
+       unsigned long swap;
        u64 pss;
 };
 
        pte = pte_offset_map_lock(vma->vm_mm, pmd, addr, &ptl);
        for (; addr != end; pte++, addr += PAGE_SIZE) {
                ptent = *pte;
+
+               if (is_swap_pte(ptent)) {
+                       mss->swap += PAGE_SIZE;
+                       continue;
+               }
+
                if (!pte_present(ptent))
                        continue;
 
                   "Shared_Dirty:   %8lu kB\n"
                   "Private_Clean:  %8lu kB\n"
                   "Private_Dirty:  %8lu kB\n"
-                  "Referenced:     %8lu kB\n",
+                  "Referenced:     %8lu kB\n"
+                  "Swap:           %8lu kB\n",
                   (vma->vm_end - vma->vm_start) >> 10,
                   mss.resident >> 10,
                   (unsigned long)(mss.pss >> (10 + PSS_SHIFT)),
                   mss.shared_dirty  >> 10,
                   mss.private_clean >> 10,
                   mss.private_dirty >> 10,
-                  mss.referenced >> 10);
+                  mss.referenced >> 10,
+                  mss.swap >> 10);
 
        return ret;
 }