Merge branch 'mm-pkeys-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-block.git] / arch / x86 / mm / gup.c
index bab259e75984441a5857da5c3029d06d705ad551..b8b6a60b32cf47837070518bd44d4c4742910697 100644 (file)
@@ -120,7 +120,6 @@ static noinline int gup_pte_range(pmd_t pmd, unsigned long addr,
                        return 0;
                }
 
-               page = pte_page(pte);
                if (pte_devmap(pte)) {
                        pgmap = get_dev_pagemap(pte_pfn(pte), pgmap);
                        if (unlikely(!pgmap)) {
@@ -134,6 +133,7 @@ static noinline int gup_pte_range(pmd_t pmd, unsigned long addr,
                        return 0;
                }
                VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
+               page = pte_page(pte);
                get_page(page);
                put_dev_pagemap(pgmap);
                SetPageReferenced(page);
@@ -150,7 +150,7 @@ static inline void get_head_page_multiple(struct page *page, int nr)
 {
        VM_BUG_ON_PAGE(page != compound_head(page), page);
        VM_BUG_ON_PAGE(page_count(page) == 0, page);
-       atomic_add(nr, &page->_count);
+       page_ref_add(page, nr);
        SetPageReferenced(page);
 }