local_unlock_irq(&s->cpu_slab->lock);
        slub_put_cpu_ptr(s->cpu_slab);
  
-       /*
-        * memcg and kmem_cache debug support and memory initialization.
-        * Done outside of the IRQ disabled fastpath loop.
-        */
-       slab_post_alloc_hook(s, objcg, flags, size, p,
-                       slab_want_init_on_alloc(flags, s), s->object_size);
        return i;
+ 
  error:
        slub_put_cpu_ptr(s->cpu_slab);
 -      slab_post_alloc_hook(s, objcg, flags, i, p, false);
 +      slab_post_alloc_hook(s, objcg, flags, i, p, false, s->object_size);
        kmem_cache_free_bulk(s, i, p);
        return 0;
 -      slab_post_alloc_hook(s, objcg, flags, i, p, false);
+ 
+ }
+ #else /* CONFIG_SLUB_TINY */
+ static int __kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags,
+                       size_t size, void **p, struct obj_cgroup *objcg)
+ {
+       int i;
+ 
+       for (i = 0; i < size; i++) {
+               void *object = kfence_alloc(s, s->object_size, flags);
+ 
+               if (unlikely(object)) {
+                       p[i] = object;
+                       continue;
+               }
+ 
+               p[i] = __slab_alloc_node(s, flags, NUMA_NO_NODE,
+                                        _RET_IP_, s->object_size);
+               if (unlikely(!p[i]))
+                       goto error;
+ 
+               maybe_wipe_obj_freeptr(s, p[i]);
+       }
+ 
+       return i;
+ 
+ error:
 -                              slab_want_init_on_alloc(flags, s));
++      slab_post_alloc_hook(s, objcg, flags, i, p, false, s->object_size);
+       kmem_cache_free_bulk(s, i, p);
+       return 0;
+ }
+ #endif /* CONFIG_SLUB_TINY */
+ 
+ /* Note that interrupts must be enabled when calling this function. */
+ int kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size,
+                         void **p)
+ {
+       int i;
+       struct obj_cgroup *objcg = NULL;
+ 
+       if (!size)
+               return 0;
+ 
+       /* memcg and kmem_cache debug support */
+       s = slab_pre_alloc_hook(s, NULL, &objcg, size, flags);
+       if (unlikely(!s))
+               return 0;
+ 
+       i = __kmem_cache_alloc_bulk(s, flags, size, p, objcg);
+ 
+       /*
+        * memcg and kmem_cache debug support and memory initialization.
+        * Done outside of the IRQ disabled fastpath loop.
+        */
+       if (i != 0)
+               slab_post_alloc_hook(s, objcg, flags, size, p,
++                      slab_want_init_on_alloc(flags, s), s->object_size);
+       return i;
  }
  EXPORT_SYMBOL(kmem_cache_alloc_bulk);
  
        mutex_unlock(&slab_mutex);
        return 0;
  }
 -
 -__initcall(slab_sysfs_init);
 +late_initcall(slab_sysfs_init);
- #endif /* CONFIG_SYSFS */
+ #endif /* SLAB_SUPPORTS_SYSFS */
  
  #if defined(CONFIG_SLUB_DEBUG) && defined(CONFIG_DEBUG_FS)
  static int slab_debugfs_show(struct seq_file *seq, void *v)