]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - mm/gup.c
Merge tags 'cris-for-4.16' and 'cris-for-4.16-urgent' of git://git.kernel.org/pub...
[linux.git] / mm / gup.c
index 9e17d8db2d6bd6e7918a84a76190147283e4974d..1b46e6e74881d3ce634511d98e4f177625b5501c 100644 (file)
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -1394,7 +1394,6 @@ static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end,
 
                VM_BUG_ON_PAGE(compound_head(page) != head, page);
 
-               put_dev_pagemap(pgmap);
                SetPageReferenced(page);
                pages[*nr] = page;
                (*nr)++;
@@ -1404,6 +1403,8 @@ static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end,
        ret = 1;
 
 pte_unmap:
+       if (pgmap)
+               put_dev_pagemap(pgmap);
        pte_unmap(ptem);
        return ret;
 }
@@ -1443,10 +1444,12 @@ static int __gup_device_huge(unsigned long pfn, unsigned long addr,
                SetPageReferenced(page);
                pages[*nr] = page;
                get_page(page);
-               put_dev_pagemap(pgmap);
                (*nr)++;
                pfn++;
        } while (addr += PAGE_SIZE, addr != end);
+
+       if (pgmap)
+               put_dev_pagemap(pgmap);
        return 1;
 }