Thread (14 messages) 14 messages, 4 authors, 2011-03-09

Re: [PATCH 3/3] mm: Simplify anon_vma refcounts

From: Peter Zijlstra <hidden>
Date: 2011-02-18 11:29:30
Also in: lkml

On Thu, 2011-02-17 at 10:30 -0800, Linus Torvalds wrote:
On Thu, Feb 17, 2011 at 8:19 AM, Peter Zijlstra [off-list ref] wrote:
quoted
+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. 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help