mm: extend KSM refcounts to the anon_vma root
[sfrench/cifs-2.6.git] / mm / migrate.c
index 4205b1d6049ed2f6a07da22c0a100d52d6ccd0f8..38e7cad782f4b008a85f03e6635332f46ba0932b 100644 (file)
@@ -639,7 +639,7 @@ static int unmap_and_move(new_page_t get_new_page, unsigned long private,
                         * exist when the page is remapped later
                         */
                        anon_vma = page_anon_vma(page);
-                       atomic_inc(&anon_vma->external_refcount);
+                       get_anon_vma(anon_vma);
                }
        }
 
@@ -682,12 +682,8 @@ skip_unmap:
 rcu_unlock:
 
        /* Drop an anon_vma reference if we took one */
-       if (anon_vma && atomic_dec_and_lock(&anon_vma->external_refcount, &anon_vma->lock)) {
-               int empty = list_empty(&anon_vma->head);
-               spin_unlock(&anon_vma->lock);
-               if (empty)
-                       anon_vma_free(anon_vma);
-       }
+       if (anon_vma)
+               drop_anon_vma(anon_vma);
 
        if (rcu_locked)
                rcu_read_unlock();