summaryrefslogtreecommitdiff
path: root/mm/vmalloc.c
diff options
context:
space:
mode:
authorJohannes Weiner <hannes@cmpxchg.org>2026-02-23 11:01:07 -0500
committerAndrew Morton <akpm@linux-foundation.org>2026-04-05 13:53:04 -0700
commitc466412c73c339e33e83b68770e5b556457c03de (patch)
tree76b9dc7dea8c1006b7ad2d84de2deae2a3d37ee5 /mm/vmalloc.c
parentb9ec0ed907062a67a7cca2d04e7652aec06a0c35 (diff)
downloadlinux-next-c466412c73c339e33e83b68770e5b556457c03de.tar.gz
linux-next-c466412c73c339e33e83b68770e5b556457c03de.zip
mm: memcontrol: switch to native NR_VMALLOC vmstat counter
Eliminates the custom memcg counter and results in a single, consolidated accounting call in vmalloc code. Link: https://lkml.kernel.org/r/20260223160147.3792777-2-hannes@cmpxchg.org Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Shakeel Butt <shakeel.butt@linux.dev> Reviewed-by: Uladzislau Rezki (Sony) <urezki@gmail.com> Reviewed-by: Roman Gushchin <roman.gushchin@linux.dev> Reviewed-by: Vishal Moola (Oracle) <vishal.moola@gmail.com> Cc: Joshua Hahn <joshua.hahnjy@gmail.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Muchun Song <muchun.song@linux.dev> Cc: Shakeel Butt <shakeel.butt@linux.dev> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'mm/vmalloc.c')
-rw-r--r--mm/vmalloc.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index e9d7c2a8c753..6dda97c3799e 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -3459,9 +3459,6 @@ void vfree(const void *addr)
if (unlikely(vm->flags & VM_FLUSH_RESET_PERMS))
vm_reset_perms(vm);
- /* All pages of vm should be charged to same memcg, so use first one. */
- if (vm->nr_pages && !(vm->flags & VM_MAP_PUT_PAGES))
- mod_memcg_page_state(vm->pages[0], MEMCG_VMALLOC, -vm->nr_pages);
for (i = 0; i < vm->nr_pages; i++) {
struct page *page = vm->pages[i];
@@ -3471,7 +3468,7 @@ void vfree(const void *addr)
* can be freed as an array of order-0 allocations
*/
if (!(vm->flags & VM_MAP_PUT_PAGES))
- dec_node_page_state(page, NR_VMALLOC);
+ mod_lruvec_page_state(page, NR_VMALLOC, -1);
__free_page(page);
cond_resched();
}
@@ -3662,7 +3659,7 @@ vm_area_alloc_pages(gfp_t gfp, int nid,
continue;
}
- mod_node_page_state(page_pgdat(page), NR_VMALLOC, 1 << large_order);
+ mod_lruvec_page_state(page, NR_VMALLOC, 1 << large_order);
split_page(page, large_order);
for (i = 0; i < (1U << large_order); i++)
@@ -3709,7 +3706,7 @@ vm_area_alloc_pages(gfp_t gfp, int nid,
pages + nr_allocated);
for (i = nr_allocated; i < nr_allocated + nr; i++)
- inc_node_page_state(pages[i], NR_VMALLOC);
+ mod_lruvec_page_state(pages[i], NR_VMALLOC, 1);
nr_allocated += nr;
@@ -3735,7 +3732,7 @@ vm_area_alloc_pages(gfp_t gfp, int nid,
if (unlikely(!page))
break;
- mod_node_page_state(page_pgdat(page), NR_VMALLOC, 1 << order);
+ mod_lruvec_page_state(page, NR_VMALLOC, 1 << order);
/*
* High-order allocations must be able to be treated as
@@ -3879,11 +3876,6 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
vmalloc_gfp_adjust(gfp_mask, page_order), node,
page_order, nr_small_pages, area->pages);
- /* All pages of vm should be charged to same memcg, so use first one. */
- if (gfp_mask & __GFP_ACCOUNT && area->nr_pages)
- mod_memcg_page_state(area->pages[0], MEMCG_VMALLOC,
- area->nr_pages);
-
/*
* If not enough pages were obtained to accomplish an
* allocation request, free them via vfree() if any.