Skip to content

Commit

Permalink
SLUB: Fix sysfs refcounting
Browse files Browse the repository at this point in the history
If CONFIG_SYSFS is set then free the kmem_cache structure when
sysfs tells us its okay.

Otherwise there is the danger (as pointed out by
Al Viro) that sysfs thinks the kobject still exists after
kmem_cache_destroy() removed it.

Signed-off-by: Christoph Lameter <clameter@sgi.com>
Reviewed-by: Pekka J Enberg <penberg@cs.helsinki.fi>
  • Loading branch information
Christoph Lameter committed Feb 4, 2008
1 parent e374d48 commit 151c602
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions mm/slub.c
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,10 @@ static void sysfs_slab_remove(struct kmem_cache *);
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) {}
static inline void sysfs_slab_remove(struct kmem_cache *s)
{
kfree(s);
}
#endif

/********************************************************************
Expand Down Expand Up @@ -2322,7 +2325,6 @@ void kmem_cache_destroy(struct kmem_cache *s)
if (kmem_cache_close(s))
WARN_ON(1);
sysfs_slab_remove(s);
kfree(s);
} else
up_write(&slub_lock);
}
Expand Down Expand Up @@ -3937,13 +3939,21 @@ static ssize_t slab_attr_store(struct kobject *kobj,
return err;
}

static void kmem_cache_release(struct kobject *kobj)
{
struct kmem_cache *s = to_slab(kobj);

kfree(s);
}

static struct sysfs_ops slab_sysfs_ops = {
.show = slab_attr_show,
.store = slab_attr_store,
};

static struct kobj_type slab_ktype = {
.sysfs_ops = &slab_sysfs_ops,
.release = kmem_cache_release
};

static int uevent_filter(struct kset *kset, struct kobject *kobj)
Expand Down Expand Up @@ -4045,6 +4055,7 @@ static void sysfs_slab_remove(struct kmem_cache *s)
{
kobject_uevent(&s->kobj, KOBJ_REMOVE);
kobject_del(&s->kobj);
kobject_put(&s->kobj);
}

/*
Expand Down

0 comments on commit 151c602

Please sign in to comment.