lkml.org 
[lkml]   [2011]   [Feb]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH 3/3] mm: Simplify anon_vma refcounts
From
Date
On Thu, 2011-02-17 at 10:30 -0800, Linus Torvalds wrote:
> On Thu, Feb 17, 2011 at 8:19 AM, Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
> >
> > +void __put_anon_vma(struct anon_vma *anon_vma)
> > +{
> > + if (anon_vma->root != anon_vma)
> > + put_anon_vma(anon_vma->root);
> > + anon_vma_free(anon_vma);
> > }
>
> So this makes me nervous. It looks like recursion.
>
> Now, I don't think we can ever get a chain of these things (because
> the root should be the root of everything),

Exactly.

> but I still preferred the
> older code that made that "one-level root" case explicit, and didn't
> have recursion.
>
> IOW, even though it should be entirely equivalent, I think I'd really
> prefer something like
>
> void __put_anon_vma(struct anon_vma *anon_vma)
> {
> struct anon_vma *root = anon_vma->root;
>
> if (root != anon_vma && atomic_dec_and_test(&root->refcount))
> anon_vma_free(root);
> anon_vma_free(anon_vma);
> }
>
> instead. Exactly because it makes it very clear that the "root" is a
> root, and we're not doing some possibly arbitrarily deep list like the
> dentry tree (which avoids recursion by open-coding its freeing as a
> loop).
>
> Hmm? (The above is obviously untested, maybe it has some stupid bug)

Looks about right, I'll give it a spin.



\
 
 \ /
  Last update: 2011-02-18 12:31    [W:0.137 / U:0.020 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site