is incremented every time a file huge page is successfully
        allocated.
 
+thp_file_fallback
+       is incremented if a file huge page is attempted to be allocated
+       but fails and instead falls back to using small pages.
+
 thp_file_mapped
        is incremented every time a file huge page is mapped into
        user address space.
 
                THP_COLLAPSE_ALLOC,
                THP_COLLAPSE_ALLOC_FAILED,
                THP_FILE_ALLOC,
+               THP_FILE_FALLBACK,
                THP_FILE_MAPPED,
                THP_SPLIT_PAGE,
                THP_SPLIT_PAGE_FAILED,
 
 #ifndef CONFIG_TRANSPARENT_HUGEPAGE
 #define THP_FILE_ALLOC ({ BUILD_BUG(); 0; })
+#define THP_FILE_FALLBACK ({ BUILD_BUG(); 0; })
 #define THP_FILE_MAPPED ({ BUILD_BUG(); 0; })
 #endif
 
 
        pgoff_t hindex;
        struct page *page;
 
-       if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGE_PAGECACHE))
-               return NULL;
-
        hindex = round_down(index, HPAGE_PMD_NR);
        if (xa_find(&mapping->i_pages, &hindex, hindex + HPAGE_PMD_NR - 1,
                                                                XA_PRESENT))
        shmem_pseudo_vma_destroy(&pvma);
        if (page)
                prep_transhuge_page(page);
+       else
+               count_vm_event(THP_FILE_FALLBACK);
        return page;
 }
 
 
        error = mem_cgroup_try_charge_delay(page, charge_mm, gfp, &memcg,
                                            PageTransHuge(page));
-       if (error)
+       if (error) {
+               if (PageTransHuge(page))
+                       count_vm_event(THP_FILE_FALLBACK);
                goto unacct;
+       }
        error = shmem_add_to_page_cache(page, mapping, hindex,
                                        NULL, gfp & GFP_RECLAIM_MASK);
        if (error) {