}
 
 /* Returns true if the VMA has associated reserve pages */
-static bool vma_has_reserves(struct vm_area_struct *vma, long chg)
+static bool vma_has_reserves(long chg)
 {
-       if (vma->vm_flags & VM_NORESERVE) {
-               /*
-                * This address is already reserved by other process(chg == 0),
-                * so, we should decrement reserved count. Without decrementing,
-                * reserve count remains after releasing inode, because this
-                * allocated page will go into page cache and is regarded as
-                * coming from reserved pool in releasing step.  Currently, we
-                * don't have any other solution to deal with this situation
-                * properly, so add work-around here.
-                */
-               if (vma->vm_flags & VM_MAYSHARE && chg == 0)
-                       return true;
-               else
-                       return false;
-       }
-
-       /* Shared mappings always use reserves */
-       if (vma->vm_flags & VM_MAYSHARE) {
-               /*
-                * We know VM_NORESERVE is not set.  Therefore, there SHOULD
-                * be a region map for all pages.  The only situation where
-                * there is no region map is if a hole was punched via
-                * fallocate.  In this case, there really are no reserves to
-                * use.  This situation is indicated if chg != 0.
-                */
-               if (chg)
-                       return false;
-               else
-                       return true;
-       }
-
        /*
-        * Only the process that called mmap() has reserves for
-        * private mappings.
+        * Now "chg" has all the conditions considered for whether we
+        * should use an existing reservation.
         */
-       if (is_vma_resv_set(vma, HPAGE_RESV_OWNER)) {
-               /*
-                * Like the shared case above, a hole punch or truncate
-                * could have been performed on the private mapping.
-                * Examine the value of chg to determine if reserves
-                * actually exist or were previously consumed.
-                * Very Subtle - The value of chg comes from a previous
-                * call to vma_needs_reserves().  The reserve map for
-                * private mappings has different (opposite) semantics
-                * than that of shared mappings.  vma_needs_reserves()
-                * has already taken this difference in semantics into
-                * account.  Therefore, the meaning of chg is the same
-                * as in the shared case above.  Code could easily be
-                * combined, but keeping it separate draws attention to
-                * subtle differences.
-                */
-               if (chg)
-                       return false;
-               else
-                       return true;
-       }
-
-       return false;
+       return chg == 0;
 }
 
 static void enqueue_hugetlb_folio(struct hstate *h, struct folio *folio)
         * have no page reserves. This check ensures that reservations are
         * not "stolen". The child may still get SIGKILLed
         */
-       if (!vma_has_reserves(vma, chg) && !available_huge_pages(h))
+       if (!vma_has_reserves(chg) && !available_huge_pages(h))
                goto err;
 
        gfp_mask = htlb_alloc_mask(h);
                folio = dequeue_hugetlb_folio_nodemask(h, gfp_mask,
                                                        nid, nodemask);
 
-       if (folio && vma_has_reserves(vma, chg)) {
+       if (folio && vma_has_reserves(chg)) {
                folio_set_hugetlb_restore_reserve(folio);
                h->resv_huge_pages--;
        }
                if (!folio)
                        goto out_uncharge_cgroup;
                spin_lock_irq(&hugetlb_lock);
-               if (vma_has_reserves(vma, gbl_chg)) {
+               if (vma_has_reserves(gbl_chg)) {
                        folio_set_hugetlb_restore_reserve(folio);
                        h->resv_huge_pages--;
                }