* need to adjust max_huge_pages if the page is not freed.
                 * Attempt to allocate vmemmmap here so that we can take
                 * appropriate action on failure.
+                *
+                * The folio_test_hugetlb check here is because
+                * remove_hugetlb_folio will clear hugetlb folio flag for
+                * non-vmemmap optimized hugetlb folios.
                 */
-               rc = hugetlb_vmemmap_restore(h, &folio->page);
-               if (!rc) {
-                       update_and_free_hugetlb_folio(h, folio, false);
-               } else {
-                       spin_lock_irq(&hugetlb_lock);
-                       add_hugetlb_folio(h, folio, false);
-                       h->max_huge_pages++;
-                       spin_unlock_irq(&hugetlb_lock);
-               }
+               if (folio_test_hugetlb(folio)) {
+                       rc = hugetlb_vmemmap_restore(h, &folio->page);
+                       if (rc) {
+                               spin_lock_irq(&hugetlb_lock);
+                               add_hugetlb_folio(h, folio, false);
+                               h->max_huge_pages++;
+                               goto out;
+                       }
+               } else
+                       rc = 0;
 
+               update_and_free_hugetlb_folio(h, folio, false);
                return rc;
        }
 out: