vmalloc: allow to account vmalloc to memcg
authorVladimir Davydov <[email protected]>
Thu, 14 Jan 2016 23:18:18 +0000 (15:18 -0800)
committerLinus Torvalds <[email protected]>
Fri, 15 Jan 2016 00:00:49 +0000 (16:00 -0800)
Make vmalloc family functions allocate vmalloc area pages with
alloc_kmem_pages so that if __GFP_ACCOUNT is set they will be accounted
to memcg.  This is needed, at least, to account alloc_fdmem allocations.

Signed-off-by: Vladimir Davydov <[email protected]>
Acked-by: Johannes Weiner <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Greg Thelen <[email protected]>
Cc: Christoph Lameter <[email protected]>
Cc: Pekka Enberg <[email protected]>
Cc: David Rientjes <[email protected]>
Cc: Joonsoo Kim <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
mm/vmalloc.c

index 8e3c9c5a3042b6149ff783bb1dfc0c0e08dc4046..9a58f9a1874df5da8d27fb0f51bac3628589ee14 100644 (file)
@@ -1477,7 +1477,7 @@ static void __vunmap(const void *addr, int deallocate_pages)
                        struct page *page = area->pages[i];
 
                        BUG_ON(!page);
-                       __free_page(page);
+                       __free_kmem_pages(page, 0);
                }
 
                if (area->flags & VM_VPAGES)
@@ -1608,9 +1608,9 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask,
                struct page *page;
 
                if (node == NUMA_NO_NODE)
-                       page = alloc_page(alloc_mask);
+                       page = alloc_kmem_pages(alloc_mask, order);
                else
-                       page = alloc_pages_node(node, alloc_mask, order);
+                       page = alloc_kmem_pages_node(node, alloc_mask, order);
 
                if (unlikely(!page)) {
                        /* Successfully allocated i pages, free them in __vunmap() */