diff options
author | Vlastimil Babka <vbabka@suse.cz> | 2022-11-10 11:53:26 +0300 |
---|---|---|
committer | Vlastimil Babka <vbabka@suse.cz> | 2022-11-21 12:35:38 +0300 |
commit | c64b95d3dd0236062ded3caa928175a3b5cc1f97 (patch) | |
tree | 99b303354f6e5e070545c8f08497f109bb35658b /mm/slub.c | |
parent | 14d3eb66e16a55d279598c8ed7ae1ca85066ff5b (diff) | |
parent | 7c82b3b308f9ca24852e3b0ee963b9eae128b78a (diff) | |
download | linux-c64b95d3dd0236062ded3caa928175a3b5cc1f97.tar.xz |
Merge branch 'slab/for-6.2/slub-sysfs' into slab/for-next
- Two patches for SLUB's sysfs by Rasmus Villemoes to remove dead code
and optimize boot time with late initialization.
- Allow SLUB's sysfs 'failslab' parameter to be runtime-controllable
again as it can be both useful and safe, by Alexander Atanasov.
Diffstat (limited to 'mm/slub.c')
-rw-r--r-- | mm/slub.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/mm/slub.c b/mm/slub.c index 52b8995a03d1..1ff5319c0ea8 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -5575,7 +5575,21 @@ static ssize_t failslab_show(struct kmem_cache *s, char *buf) { return sysfs_emit(buf, "%d\n", !!(s->flags & SLAB_FAILSLAB)); } -SLAB_ATTR_RO(failslab); + +static ssize_t failslab_store(struct kmem_cache *s, const char *buf, + size_t length) +{ + if (s->refcount > 1) + return -EINVAL; + + if (buf[0] == '1') + WRITE_ONCE(s->flags, s->flags | SLAB_FAILSLAB); + else + WRITE_ONCE(s->flags, s->flags & ~SLAB_FAILSLAB); + + return length; +} +SLAB_ATTR(failslab); #endif static ssize_t shrink_show(struct kmem_cache *s, char *buf) @@ -5909,11 +5923,6 @@ static int sysfs_slab_add(struct kmem_cache *s) struct kset *kset = cache_kset(s); int unmergeable = slab_unmergeable(s); - if (!kset) { - kobject_init(&s->kobj, &slab_ktype); - return 0; - } - if (!unmergeable && disable_higher_order_debug && (slub_debug & DEBUG_METADATA_FLAGS)) unmergeable = 1; @@ -6043,8 +6052,7 @@ static int __init slab_sysfs_init(void) mutex_unlock(&slab_mutex); return 0; } - -__initcall(slab_sysfs_init); +late_initcall(slab_sysfs_init); #endif /* CONFIG_SYSFS */ #if defined(CONFIG_SLUB_DEBUG) && defined(CONFIG_DEBUG_FS) |