Revert "mm/sl[aou]b: Move sysfs_slab_add to common"
[firefly-linux-kernel-4.4.55.git] / mm / slub.c
index 0b122d8ec2169ab62dda8dc8abce7c0247a81ede..dafd465f7a3f32b4e28a9d95ec7d0aec15878b61 100644 (file)
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -202,10 +202,12 @@ struct track {
 enum track_item { TRACK_ALLOC, TRACK_FREE };
 
 #ifdef CONFIG_SYSFS
+static int sysfs_slab_add(struct kmem_cache *);
 static int sysfs_slab_alias(struct kmem_cache *, const char *);
 static void sysfs_slab_remove(struct kmem_cache *);
 
 #else
+static inline int sysfs_slab_add(struct kmem_cache *s) { return 0; }
 static inline int sysfs_slab_alias(struct kmem_cache *s, const char *p)
                                                        { return 0; }
 static inline void sysfs_slab_remove(struct kmem_cache *s) { }
@@ -3943,7 +3945,20 @@ struct kmem_cache *__kmem_cache_alias(const char *name, size_t size,
 
 int __kmem_cache_create(struct kmem_cache *s, unsigned long flags)
 {
-       return kmem_cache_open(s, flags);
+       int err;
+
+       err = kmem_cache_open(s, flags);
+       if (err)
+               return err;
+
+       mutex_unlock(&slab_mutex);
+       err = sysfs_slab_add(s);
+       mutex_lock(&slab_mutex);
+
+       if (err)
+               kmem_cache_close(s);
+
+       return err;
 }
 
 #ifdef CONFIG_SMP
@@ -5233,7 +5248,7 @@ static char *create_unique_id(struct kmem_cache *s)
        return name;
 }
 
-int sysfs_slab_add(struct kmem_cache *s)
+static int sysfs_slab_add(struct kmem_cache *s)
 {
        int err;
        const char *name;