void page_add_anon_rmap(struct page *page,
        struct vm_area_struct *vma, unsigned long address)
 {
-       struct anon_vma *anon_vma = vma->anon_vma;
-       pgoff_t index;
-
        BUG_ON(PageReserved(page));
-       BUG_ON(!anon_vma);
 
        inc_mm_counter(vma->vm_mm, anon_rss);
 
-       anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
-       index = (address - vma->vm_start) >> PAGE_SHIFT;
-       index += vma->vm_pgoff;
-       index >>= PAGE_CACHE_SHIFT - PAGE_SHIFT;
-
        if (atomic_inc_and_test(&page->_mapcount)) {
-               page->index = index;
+               struct anon_vma *anon_vma = vma->anon_vma;
+               pgoff_t index;
+
+               BUG_ON(!anon_vma);
+               anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
                page->mapping = (struct address_space *) anon_vma;
+
+               index = (address - vma->vm_start) >> PAGE_SHIFT;
+               index += vma->vm_pgoff;
+               index >>= PAGE_CACHE_SHIFT - PAGE_SHIFT;
+               page->index = index;
+
                inc_page_state(nr_mapped);
        }
        /* else checking page index and mapping is racy */