diff options
-rw-r--r-- | include/linux/slub_def.h | 4 | ||||
-rw-r--r-- | mm/slab_common.c | 2 | ||||
-rw-r--r-- | mm/slub.c | 12 |
3 files changed, 13 insertions, 5 deletions
diff --git a/include/linux/slub_def.h b/include/linux/slub_def.h index 75f56c2ef2d4..07ef550c6627 100644 --- a/include/linux/slub_def.h +++ b/include/linux/slub_def.h | |||
@@ -113,9 +113,9 @@ struct kmem_cache { | |||
113 | 113 | ||
114 | #ifdef CONFIG_SYSFS | 114 | #ifdef CONFIG_SYSFS |
115 | #define SLAB_SUPPORTS_SYSFS | 115 | #define SLAB_SUPPORTS_SYSFS |
116 | void sysfs_slab_remove(struct kmem_cache *); | 116 | void sysfs_slab_release(struct kmem_cache *); |
117 | #else | 117 | #else |
118 | static inline void sysfs_slab_remove(struct kmem_cache *s) | 118 | static inline void sysfs_slab_release(struct kmem_cache *s) |
119 | { | 119 | { |
120 | } | 120 | } |
121 | #endif | 121 | #endif |
diff --git a/mm/slab_common.c b/mm/slab_common.c index 4a999d749d2b..e6311b2dbba6 100644 --- a/mm/slab_common.c +++ b/mm/slab_common.c | |||
@@ -483,7 +483,7 @@ static void release_caches(struct list_head *release, bool need_rcu_barrier) | |||
483 | 483 | ||
484 | list_for_each_entry_safe(s, s2, release, list) { | 484 | list_for_each_entry_safe(s, s2, release, list) { |
485 | #ifdef SLAB_SUPPORTS_SYSFS | 485 | #ifdef SLAB_SUPPORTS_SYSFS |
486 | sysfs_slab_remove(s); | 486 | sysfs_slab_release(s); |
487 | #else | 487 | #else |
488 | slab_kmem_cache_release(s); | 488 | slab_kmem_cache_release(s); |
489 | #endif | 489 | #endif |
@@ -214,11 +214,13 @@ enum track_item { TRACK_ALLOC, TRACK_FREE }; | |||
214 | static int sysfs_slab_add(struct kmem_cache *); | 214 | static int sysfs_slab_add(struct kmem_cache *); |
215 | static int sysfs_slab_alias(struct kmem_cache *, const char *); | 215 | static int sysfs_slab_alias(struct kmem_cache *, const char *); |
216 | static void memcg_propagate_slab_attrs(struct kmem_cache *s); | 216 | static void memcg_propagate_slab_attrs(struct kmem_cache *s); |
217 | static void sysfs_slab_remove(struct kmem_cache *s); | ||
217 | #else | 218 | #else |
218 | static inline int sysfs_slab_add(struct kmem_cache *s) { return 0; } | 219 | static inline int sysfs_slab_add(struct kmem_cache *s) { return 0; } |
219 | static inline int sysfs_slab_alias(struct kmem_cache *s, const char *p) | 220 | static inline int sysfs_slab_alias(struct kmem_cache *s, const char *p) |
220 | { return 0; } | 221 | { return 0; } |
221 | static inline void memcg_propagate_slab_attrs(struct kmem_cache *s) { } | 222 | static inline void memcg_propagate_slab_attrs(struct kmem_cache *s) { } |
223 | static inline void sysfs_slab_remove(struct kmem_cache *s) { } | ||
222 | #endif | 224 | #endif |
223 | 225 | ||
224 | static inline void stat(const struct kmem_cache *s, enum stat_item si) | 226 | static inline void stat(const struct kmem_cache *s, enum stat_item si) |
@@ -3687,6 +3689,7 @@ int __kmem_cache_shutdown(struct kmem_cache *s) | |||
3687 | if (n->nr_partial || slabs_node(s, node)) | 3689 | if (n->nr_partial || slabs_node(s, node)) |
3688 | return 1; | 3690 | return 1; |
3689 | } | 3691 | } |
3692 | sysfs_slab_remove(s); | ||
3690 | return 0; | 3693 | return 0; |
3691 | } | 3694 | } |
3692 | 3695 | ||
@@ -5637,7 +5640,7 @@ out_del_kobj: | |||
5637 | goto out; | 5640 | goto out; |
5638 | } | 5641 | } |
5639 | 5642 | ||
5640 | void sysfs_slab_remove(struct kmem_cache *s) | 5643 | static void sysfs_slab_remove(struct kmem_cache *s) |
5641 | { | 5644 | { |
5642 | if (slab_state < FULL) | 5645 | if (slab_state < FULL) |
5643 | /* | 5646 | /* |
@@ -5651,7 +5654,12 @@ void sysfs_slab_remove(struct kmem_cache *s) | |||
5651 | #endif | 5654 | #endif |
5652 | kobject_uevent(&s->kobj, KOBJ_REMOVE); | 5655 | kobject_uevent(&s->kobj, KOBJ_REMOVE); |
5653 | kobject_del(&s->kobj); | 5656 | kobject_del(&s->kobj); |
5654 | kobject_put(&s->kobj); | 5657 | } |
5658 | |||
5659 | void sysfs_slab_release(struct kmem_cache *s) | ||
5660 | { | ||
5661 | if (slab_state >= FULL) | ||
5662 | kobject_put(&s->kobj); | ||
5655 | } | 5663 | } |
5656 | 5664 | ||
5657 | /* | 5665 | /* |