arm64: mm: avoid virt_to_page() translation for the zero page
[cascardo/linux.git] / mm / mincore.c
index 2a565ed..c0b5ba9 100644 (file)
@@ -75,7 +75,7 @@ static unsigned char mincore_page(struct address_space *mapping, pgoff_t pgoff)
 #endif
        if (page) {
                present = PageUptodate(page);
-               page_cache_release(page);
+               put_page(page);
        }
 
        return present;
@@ -117,7 +117,8 @@ static int mincore_pte_range(pmd_t *pmd, unsigned long addr, unsigned long end,
        unsigned char *vec = walk->private;
        int nr = (end - addr) >> PAGE_SHIFT;
 
-       if (pmd_trans_huge_lock(pmd, vma, &ptl)) {
+       ptl = pmd_trans_huge_lock(pmd, vma);
+       if (ptl) {
                memset(vec, 1, nr);
                spin_unlock(ptl);
                goto out;
@@ -210,7 +211,7 @@ static long do_mincore(unsigned long addr, unsigned long pages, unsigned char *v
  * return values:
  *  zero    - success
  *  -EFAULT - vec points to an illegal address
- *  -EINVAL - addr is not a multiple of PAGE_CACHE_SIZE
+ *  -EINVAL - addr is not a multiple of PAGE_SIZE
  *  -ENOMEM - Addresses in the range [addr, addr + len] are
  *             invalid for the address space of this process, or
  *             specify one or more pages which are not currently
@@ -225,14 +226,14 @@ SYSCALL_DEFINE3(mincore, unsigned long, start, size_t, len,
        unsigned char *tmp;
 
        /* Check the start address: needs to be page-aligned.. */
-       if (start & ~PAGE_CACHE_MASK)
+       if (start & ~PAGE_MASK)
                return -EINVAL;
 
        /* ..and we need to be passed a valid user-space range */
        if (!access_ok(VERIFY_READ, (void __user *) start, len))
                return -ENOMEM;
 
-       /* This also avoids any overflows on PAGE_CACHE_ALIGN */
+       /* This also avoids any overflows on PAGE_ALIGN */
        pages = len >> PAGE_SHIFT;
        pages += (offset_in_page(len)) != 0;