tile: sort the "select" lines in the TILE/TILEGX configs
[cascardo/linux.git] / mm / slab_common.c
index b50aef0..3239bfd 100644 (file)
@@ -35,7 +35,7 @@ struct kmem_cache *kmem_cache;
  */
 #define SLAB_NEVER_MERGE (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER | \
                SLAB_TRACE | SLAB_DESTROY_BY_RCU | SLAB_NOLEAKTRACE | \
-               SLAB_FAILSLAB)
+               SLAB_FAILSLAB | SLAB_KASAN)
 
 #define SLAB_MERGE_SAME (SLAB_RECLAIM_ACCOUNT | SLAB_CACHE_DMA | \
                         SLAB_NOTRACK | SLAB_ACCOUNT)
@@ -109,8 +109,12 @@ void __kmem_cache_free_bulk(struct kmem_cache *s, size_t nr, void **p)
 {
        size_t i;
 
-       for (i = 0; i < nr; i++)
-               kmem_cache_free(s, p[i]);
+       for (i = 0; i < nr; i++) {
+               if (s)
+                       kmem_cache_free(s, p[i]);
+               else
+                       kfree(p[i]);
+       }
 }
 
 int __kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t nr,
@@ -438,7 +442,7 @@ out_unlock:
                        panic("kmem_cache_create: Failed to create slab '%s'. Error %d\n",
                                name, err);
                else {
-                       printk(KERN_WARNING "kmem_cache_create(%s) failed with error %d",
+                       pr_warn("kmem_cache_create(%s) failed with error %d\n",
                                name, err);
                        dump_stack();
                }
@@ -506,7 +510,7 @@ void memcg_create_kmem_cache(struct mem_cgroup *memcg,
         * The memory cgroup could have been offlined while the cache
         * creation work was pending.
         */
-       if (!memcg_kmem_online(memcg))
+       if (memcg->kmem_state != KMEM_ONLINE)
                goto out_unlock;
 
        idx = memcg_cache_id(memcg);
@@ -693,6 +697,7 @@ static inline int shutdown_memcg_caches(struct kmem_cache *s,
 
 void slab_kmem_cache_release(struct kmem_cache *s)
 {
+       __kmem_cache_release(s);
        destroy_memcg_params(s);
        kfree_const(s->name);
        kmem_cache_free(kmem_cache, s);
@@ -721,8 +726,8 @@ void kmem_cache_destroy(struct kmem_cache *s)
                err = shutdown_cache(s, &release, &need_rcu_barrier);
 
        if (err) {
-               pr_err("kmem_cache_destroy %s: "
-                      "Slab cache still has objects\n", s->name);
+               pr_err("kmem_cache_destroy %s: Slab cache still has objects\n",
+                      s->name);
                dump_stack();
        }
 out_unlock:
@@ -1008,7 +1013,7 @@ void *kmalloc_order(size_t size, gfp_t flags, unsigned int order)
        page = alloc_kmem_pages(flags, order);
        ret = page ? page_address(page) : NULL;
        kmemleak_alloc(ret, size, 1, flags);
-       kasan_kmalloc_large(ret, size);
+       kasan_kmalloc_large(ret, size, flags);
        return ret;
 }
 EXPORT_SYMBOL(kmalloc_order);
@@ -1042,13 +1047,11 @@ static void print_slabinfo_header(struct seq_file *m)
 #else
        seq_puts(m, "slabinfo - version: 2.1\n");
 #endif
-       seq_puts(m, "# name            <active_objs> <num_objs> <objsize> "
-                "<objperslab> <pagesperslab>");
+       seq_puts(m, "# name            <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab>");
        seq_puts(m, " : tunables <limit> <batchcount> <sharedfactor>");
        seq_puts(m, " : slabdata <active_slabs> <num_slabs> <sharedavail>");
 #ifdef CONFIG_DEBUG_SLAB
-       seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> "
-                "<error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>");
+       seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> <error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>");
        seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>");
 #endif
        seq_putc(m, '\n');
@@ -1189,7 +1192,7 @@ static __always_inline void *__do_krealloc(const void *p, size_t new_size,
                ks = ksize(p);
 
        if (ks >= new_size) {
-               kasan_krealloc((void *)p, new_size);
+               kasan_krealloc((void *)p, new_size, flags);
                return (void *)p;
        }