mm/slub: fix missing ALLOC_SLOWPATH stat when bulk alloc
authorAbel Wu <wuyun.wu@huawei.com>
Tue, 13 Oct 2020 23:48:43 +0000 (16:48 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 14 Oct 2020 01:38:27 +0000 (18:38 -0700)
The ALLOC_SLOWPATH statistics is missing in bulk allocation now.  Fix it
by doing statistics in alloc slow path.

Signed-off-by: Abel Wu <wuyun.wu@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Pekka Enberg <penberg@kernel.org>
Acked-by: David Rientjes <rientjes@google.com>
Cc: Christoph Lameter <cl@linux.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Cc: Hewenliang <hewenliang4@huawei.com>
Cc: Hu Shiyuan <hushiyuan@huawei.com>
Link: http://lkml.kernel.org/r/20200811022427.1363-1-wuyun.wu@huawei.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/slub.c

index da6438bd820254ce6c42d344f14aa1be048e0212..7728a0b71d633cb628f9101a38c844048ac0a481 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -2661,6 +2661,8 @@ static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
        void *freelist;
        struct page *page;
 
+       stat(s, ALLOC_SLOWPATH);
+
        page = c->page;
        if (!page) {
                /*
@@ -2850,7 +2852,6 @@ redo:
        page = c->page;
        if (unlikely(!object || !node_match(page, node))) {
                object = __slab_alloc(s, gfpflags, node, addr, c);
-               stat(s, ALLOC_SLOWPATH);
        } else {
                void *next_object = get_freepointer_safe(s, object);