hugetlb: clean up code checking for fault/truncation races
[sfrench/cifs-2.6.git] / mm / hugetlb.c
index d78504959df769694b39007ac0c78744643a2991..b0e39045a7a86446fc5afc83601eae9a0ea954ac 100644 (file)
@@ -5680,10 +5680,6 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm,
        }
 
        ptl = huge_pte_lock(h, mm, ptep);
-       size = i_size_read(mapping->host) >> huge_page_shift(h);
-       if (idx >= size)
-               goto backout;
-
        ret = 0;
        /* If pte changed from under us, retry */
        if (!pte_same(huge_ptep_get(ptep), old_pte))
@@ -5727,10 +5723,10 @@ out:
 backout:
        spin_unlock(ptl);
 backout_unlocked:
-       unlock_page(page);
-       /* restore reserve for newly allocated pages not in page cache */
        if (new_page && !new_pagecache_page)
                restore_reserve_on_error(h, vma, haddr, page);
+
+       unlock_page(page);
        put_page(page);
        goto out;
 }
@@ -6062,26 +6058,12 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm,
 
        ptl = huge_pte_lock(h, dst_mm, dst_pte);
 
-       /*
-        * Recheck the i_size after holding PT lock to make sure not
-        * to leave any page mapped (as page_mapped()) beyond the end
-        * of the i_size (remove_inode_hugepages() is strict about
-        * enforcing that). If we bail out here, we'll also leave a
-        * page in the radix tree in the vm_shared case beyond the end
-        * of the i_size, but remove_inode_hugepages() will take care
-        * of it as soon as we drop the hugetlb_fault_mutex_table.
-        */
-       size = i_size_read(mapping->host) >> huge_page_shift(h);
-       ret = -EFAULT;
-       if (idx >= size)
-               goto out_release_unlock;
-
-       ret = -EEXIST;
        /*
         * We allow to overwrite a pte marker: consider when both MISSING|WP
         * registered, we firstly wr-protect a none pte which has no page cache
         * page backing it, then access the page.
         */
+       ret = -EEXIST;
        if (!huge_pte_none_mostly(huge_ptep_get(dst_pte)))
                goto out_release_unlock;