Skip to content

Commit

Permalink
mm/sl[aou]b: Move sysfs_slab_add to common
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Christoph Lameter authored and Pekka Enberg committed Sep 5, 2012
1 parent cbb7969 commit 96d17b7
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 13 deletions.
3 changes: 3 additions & 0 deletions mm/slab.h
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down
8 changes: 8 additions & 0 deletions mm/slab_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,14 @@ struct kmem_cache *kmem_cache_create(const char *name, size_t size, size_t align
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);
Expand Down
15 changes: 2 additions & 13 deletions mm/slub.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) { }
Expand Down Expand Up @@ -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);
}
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 96d17b7

Please sign in to comment.