Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[sfrench/cifs-2.6.git] / mm / slab.h
index 5fa8b8f20eb185452062bf2dc06802c45c0c4678..9653f2e2591ad0982d2dc74c668323a43e5b026d 100644 (file)
--- a/mm/slab.h
+++ b/mm/slab.h
@@ -254,8 +254,7 @@ static __always_inline int memcg_charge_slab(struct page *page,
        if (is_root_cache(s))
                return 0;
 
-       ret = __memcg_kmem_charge_memcg(page, gfp, order,
-                                       s->memcg_params.memcg);
+       ret = memcg_kmem_charge_memcg(page, gfp, order, s->memcg_params.memcg);
        if (ret)
                return ret;
 
@@ -269,6 +268,9 @@ static __always_inline int memcg_charge_slab(struct page *page,
 static __always_inline void memcg_uncharge_slab(struct page *page, int order,
                                                struct kmem_cache *s)
 {
+       if (!memcg_kmem_enabled())
+               return;
+
        memcg_kmem_update_page_stat(page,
                        (s->flags & SLAB_RECLAIM_ACCOUNT) ?
                        MEMCG_SLAB_RECLAIMABLE : MEMCG_SLAB_UNRECLAIMABLE,
@@ -367,6 +369,8 @@ static inline size_t slab_ksize(const struct kmem_cache *s)
        if (s->flags & (SLAB_RED_ZONE | SLAB_POISON))
                return s->object_size;
 # endif
+       if (s->flags & SLAB_KASAN)
+               return s->object_size;
        /*
         * If we have the need to store the freelist pointer
         * back there or track user information then we can
@@ -391,7 +395,11 @@ static inline struct kmem_cache *slab_pre_alloc_hook(struct kmem_cache *s,
        if (should_failslab(s, flags))
                return NULL;
 
-       return memcg_kmem_get_cache(s, flags);
+       if (memcg_kmem_enabled() &&
+           ((flags & __GFP_ACCOUNT) || (s->flags & SLAB_ACCOUNT)))
+               return memcg_kmem_get_cache(s);
+
+       return s;
 }
 
 static inline void slab_post_alloc_hook(struct kmem_cache *s, gfp_t flags,
@@ -408,7 +416,9 @@ static inline void slab_post_alloc_hook(struct kmem_cache *s, gfp_t flags,
                                         s->flags, flags);
                kasan_slab_alloc(s, object, flags);
        }
-       memcg_kmem_put_cache(s);
+
+       if (memcg_kmem_enabled())
+               memcg_kmem_put_cache(s);
 }
 
 #ifndef CONFIG_SLOB