mm/sl[aou]b: Move sysfs_slab_add to common
Simplify locking by moving the slab_add_sysfs after all locks have been dropped. Eases the upcoming move to provide sysfs support for all allocators. Reviewed-by: Glauber Costa <glommer@parallels.com> Signed-off-by: Christoph Lameter <cl@linux.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
parent
cbb79694d5
commit
96d17b7be0
|
@ -39,10 +39,13 @@ struct kmem_cache *__kmem_cache_create(const char *name, size_t size,
|
|||
#ifdef CONFIG_SLUB
|
||||
struct kmem_cache *__kmem_cache_alias(const char *name, size_t size,
|
||||
size_t align, unsigned long flags, void (*ctor)(void *));
|
||||
extern int sysfs_slab_add(struct kmem_cache *s);
|
||||
#else
|
||||
static inline struct kmem_cache *__kmem_cache_alias(const char *name, size_t size,
|
||||
size_t align, unsigned long flags, void (*ctor)(void *))
|
||||
{ return NULL; }
|
||||
static inline int sysfs_slab_add(struct kmem_cache *s) { return 0; }
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
@ -152,6 +152,14 @@ out_locked:
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (s->refcount == 1) {
|
||||
err = sysfs_slab_add(s);
|
||||
if (err)
|
||||
printk(KERN_WARNING "kmem_cache_create(%s) failed to"
|
||||
" create sysfs entry. Error %d\n",
|
||||
name, err);
|
||||
}
|
||||
|
||||
return s;
|
||||
}
|
||||
EXPORT_SYMBOL(kmem_cache_create);
|
||||
|
|
15
mm/slub.c
15
mm/slub.c
|
@ -202,12 +202,10 @@ 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) { }
|
||||
|
@ -3955,16 +3953,7 @@ struct kmem_cache *__kmem_cache_create(const char *name, size_t size,
|
|||
if (s) {
|
||||
if (kmem_cache_open(s, name,
|
||||
size, align, flags, ctor)) {
|
||||
int r;
|
||||
|
||||
mutex_unlock(&slab_mutex);
|
||||
r = sysfs_slab_add(s);
|
||||
mutex_lock(&slab_mutex);
|
||||
|
||||
if (!r)
|
||||
return s;
|
||||
|
||||
kmem_cache_close(s);
|
||||
return s;
|
||||
}
|
||||
kmem_cache_free(kmem_cache, s);
|
||||
}
|
||||
|
@ -5258,7 +5247,7 @@ static char *create_unique_id(struct kmem_cache *s)
|
|||
return name;
|
||||
}
|
||||
|
||||
static int sysfs_slab_add(struct kmem_cache *s)
|
||||
int sysfs_slab_add(struct kmem_cache *s)
|
||||
{
|
||||
int err;
|
||||
const char *name;
|
||||
|
|
Loading…
Reference in New Issue