Re: [PATCH 2/4] mm, rmap: allocate anon_vma_chain before starting tolink anon_vma_chain

From: Joonsoo Kim
Date: Wed Aug 07 2013 - 03:17:27 EST


On Wed, Aug 07, 2013 at 02:08:03AM -0400, Johannes Weiner wrote:
> >
> > list_for_each_entry_reverse(pavc, &src->anon_vma_chain, same_vma) {
> > struct anon_vma *anon_vma;
> >
> > - avc = anon_vma_chain_alloc(GFP_NOWAIT | __GFP_NOWARN);
> > - if (unlikely(!avc)) {
> > - unlock_anon_vma_root(root);
> > - root = NULL;
> > - avc = anon_vma_chain_alloc(GFP_KERNEL);
> > - if (!avc)
> > - goto enomem_failure;
> > - }
> > + avc = list_entry((&avc_list)->next, typeof(*avc), same_vma);
>
> list_first_entry() please

Okay. I will send next version soon.

>
> > + list_del(&avc->same_vma);
> > anon_vma = pavc->anon_vma;
> > root = lock_anon_vma_root(root, anon_vma);
> > anon_vma_chain_link(dst, avc, anon_vma);
> > @@ -259,8 +262,11 @@ int anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src)
> > unlock_anon_vma_root(root);
> > return 0;
> >
> > - enomem_failure:
> > - unlink_anon_vmas(dst);
> > +enomem_failure:
> > + list_for_each_entry_safe(avc, pavc, &avc_list, same_vma) {
> > + list_del(&avc->same_vma);
> > + anon_vma_chain_free(avc);
> > + }
> > return -ENOMEM;
> > }
>
> Otherwise, looks good.

Thank you!

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/