On 09/05, robert.foss@xxxxxxxxxxxxx wrote: > > @@ -2854,6 +2854,7 @@ static const struct pid_entry tgid_base_stuff[] = { > REG("clear_refs", S_IWUSR, proc_clear_refs_operations), > REG("smaps", S_IRUGO, proc_pid_smaps_operations), > REG("pagemap", S_IRUSR, proc_pagemap_operations), > + REG("totmaps", S_IRUGO, proc_totmaps_operations), I must have missed something, but I fail to understand why this patch is so complicated. Just use ONE("totmaps", S_IRUGO, proc_totmaps_operations) ? > +static int totmaps_proc_show(struct seq_file *m, void *data) > +{ > + struct proc_maps_private *priv = m->private; > + struct mm_struct *mm = priv->mm; > + struct vm_area_struct *vma; > + struct mem_size_stats mss_sum; > + > + memset(&mss_sum, 0, sizeof(mss_sum)); > + down_read(&mm->mmap_sem); > + hold_task_mempolicy(priv); ^^^^^^^^^^^^^^^^^^^^^^^^^ why? > + for (vma = mm->mmap; vma != priv->tail_vma; vma = vma->vm_next) { Hmm. the usage of ->tail_vma looks just wrong. I guess the code should work because it is NULL but still. > + struct mem_size_stats mss; > + struct mm_walk smaps_walk = { > + .pmd_entry = smaps_pte_range, > + .mm = vma->vm_mm, > + .private = &mss, > + }; > + > + if (vma->vm_mm && !is_vm_hugetlb_page(vma)) { > + memset(&mss, 0, sizeof(mss)); > + walk_page_vma(vma, &smaps_walk); > + add_smaps_sum(&mss, &mss_sum); > + } > + } Why? I mean, why not walk_page_range() ? You do not need this for-each-vma loop at all? At least if you change this patch to use the ONE() helper, and everything else looks unneeded in this case. Oleg. -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html