mm: move anon_vma ref out from under CONFIG_foo
[pandora-kernel.git] / mm / rmap.c
index 941bf82..873cd9e 100644 (file)
--- a/mm/rmap.c
+++ b/mm/rmap.c
@@ -272,13 +272,13 @@ static void anon_vma_unlink(struct anon_vma_chain *anon_vma_chain)
        list_del(&anon_vma_chain->same_anon_vma);
 
        /* We must garbage collect the anon_vma if it's empty */
-       empty = list_empty(&anon_vma->head) && !anonvma_external_refcount(anon_vma);
+       empty = list_empty(&anon_vma->head) && !atomic_read(&anon_vma->refcount);
        anon_vma_unlock(anon_vma);
 
        if (empty) {
                /* We no longer need the root anon_vma */
                if (anon_vma->root != anon_vma)
-                       drop_anon_vma(anon_vma->root);
+                       put_anon_vma(anon_vma->root);
                anon_vma_free(anon_vma);
        }
 }
@@ -303,7 +303,7 @@ static void anon_vma_ctor(void *data)
        struct anon_vma *anon_vma = data;
 
        spin_lock_init(&anon_vma->lock);
-       anonvma_external_refcount_init(anon_vma);
+       atomic_set(&anon_vma->refcount, 0);
        INIT_LIST_HEAD(&anon_vma->head);
 }
 
@@ -1486,17 +1486,16 @@ int try_to_munlock(struct page *page)
                return try_to_unmap_file(page, TTU_MUNLOCK);
 }
 
-#if defined(CONFIG_KSM) || defined(CONFIG_MIGRATION)
 /*
  * Drop an anon_vma refcount, freeing the anon_vma and anon_vma->root
  * if necessary.  Be careful to do all the tests under the lock.  Once
  * we know we are the last user, nobody else can get a reference and we
  * can do the freeing without the lock.
  */
-void drop_anon_vma(struct anon_vma *anon_vma)
+void put_anon_vma(struct anon_vma *anon_vma)
 {
-       BUG_ON(atomic_read(&anon_vma->external_refcount) <= 0);
-       if (atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->root->lock)) {
+       BUG_ON(atomic_read(&anon_vma->refcount) <= 0);
+       if (atomic_dec_and_lock(&anon_vma->refcount, &anon_vma->root->lock)) {
                struct anon_vma *root = anon_vma->root;
                int empty = list_empty(&anon_vma->head);
                int last_root_user = 0;
@@ -1507,8 +1506,8 @@ void drop_anon_vma(struct anon_vma *anon_vma)
                 * the refcount on the root and check if we need to free it.
                 */
                if (empty && anon_vma != root) {
-                       BUG_ON(atomic_read(&root->external_refcount) <= 0);
-                       last_root_user = atomic_dec_and_test(&root->external_refcount);
+                       BUG_ON(atomic_read(&root->refcount) <= 0);
+                       last_root_user = atomic_dec_and_test(&root->refcount);
                        root_empty = list_empty(&root->head);
                }
                anon_vma_unlock(anon_vma);
@@ -1520,7 +1519,6 @@ void drop_anon_vma(struct anon_vma *anon_vma)
                }
        }
 }
-#endif
 
 #ifdef CONFIG_MIGRATION
 /*