diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index 4050b8bfaf2a412cecbaefba75482d8d70b5f5d2..a6bbcd4deb394c7242e9ca67a830d2e0a8766560 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h @@ -161,6 +161,8 @@ enum mthp_stat_item { MTHP_STAT_NR_ANON, MTHP_STAT_NR_ANON_PARTIALLY_MAPPED, MTHP_STAT_FILE_ALLOC, + MTHP_STAT_FILE_FALLBACK, + MTHP_STAT_FILE_FALLBACK_CHARGE, __MTHP_STAT_COUNT }; diff --git a/mm/filemap.c b/mm/filemap.c index 2973465d9ee378fa77d4b81a4da7181b552fc617..08b69fd614544c42871a1eec8e2a77f2a22f8d53 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2027,8 +2027,10 @@ struct folio *__filemap_get_folio_mpol(struct address_space *mapping, if (order > min_order) alloc_gfp |= __GFP_NORETRY | __GFP_NOWARN; folio = filemap_alloc_folio(alloc_gfp, order, policy); - if (!folio) + if (!folio) { + count_mthp_stat(order, MTHP_STAT_FILE_FALLBACK); goto try_next; + } /* Init accessed so avoid atomic mark_page_accessed later */ if (fgp_flags & FGP_ACCESSED) @@ -2041,6 +2043,8 @@ struct folio *__filemap_get_folio_mpol(struct address_space *mapping, break; folio_put(folio); folio = NULL; + if (err != -EEXIST) + count_mthp_stat(order, MTHP_STAT_FILE_FALLBACK_CHARGE); try_next: if (order <= min_order) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 94c69255bea35e82dba23ea204b7c5fccb4e98c7..9ece5314e82a4a2a52181f664492588e69b71d2c 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -755,6 +755,8 @@ DEFINE_MTHP_STAT_ATTR(split_deferred, MTHP_STAT_SPLIT_DEFERRED); DEFINE_MTHP_STAT_ATTR(nr_anon, MTHP_STAT_NR_ANON); DEFINE_MTHP_STAT_ATTR(nr_anon_partially_mapped, MTHP_STAT_NR_ANON_PARTIALLY_MAPPED); DEFINE_MTHP_STAT_ATTR(file_alloc, MTHP_STAT_FILE_ALLOC); +DEFINE_MTHP_STAT_ATTR(file_fallback, MTHP_STAT_FILE_FALLBACK); +DEFINE_MTHP_STAT_ATTR(file_fallback_charge, MTHP_STAT_FILE_FALLBACK_CHARGE); static struct attribute *anon_stats_attrs[] = { &anon_fault_alloc_attr.attr, @@ -781,6 +783,8 @@ static struct attribute_group anon_stats_attr_grp = { static struct attribute *file_stats_attrs[] = { &file_alloc_attr.attr, + &file_fallback_attr.attr, + &file_fallback_charge_attr.attr, #ifdef CONFIG_SHMEM &shmem_alloc_attr.attr, &shmem_fallback_attr.attr,