diff options
Diffstat (limited to 'mm/slub.c')
-rw-r--r-- | mm/slub.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -4604,6 +4604,14 @@ static ssize_t trace_show(struct kmem_cache *s, char *buf) | |||
4604 | static ssize_t trace_store(struct kmem_cache *s, const char *buf, | 4604 | static ssize_t trace_store(struct kmem_cache *s, const char *buf, |
4605 | size_t length) | 4605 | size_t length) |
4606 | { | 4606 | { |
4607 | /* | ||
4608 | * Tracing a merged cache is going to give confusing results | ||
4609 | * as well as cause other issues like converting a mergeable | ||
4610 | * cache into an umergeable one. | ||
4611 | */ | ||
4612 | if (s->refcount > 1) | ||
4613 | return -EINVAL; | ||
4614 | |||
4607 | s->flags &= ~SLAB_TRACE; | 4615 | s->flags &= ~SLAB_TRACE; |
4608 | if (buf[0] == '1') { | 4616 | if (buf[0] == '1') { |
4609 | s->flags &= ~__CMPXCHG_DOUBLE; | 4617 | s->flags &= ~__CMPXCHG_DOUBLE; |
@@ -4721,6 +4729,9 @@ static ssize_t failslab_show(struct kmem_cache *s, char *buf) | |||
4721 | static ssize_t failslab_store(struct kmem_cache *s, const char *buf, | 4729 | static ssize_t failslab_store(struct kmem_cache *s, const char *buf, |
4722 | size_t length) | 4730 | size_t length) |
4723 | { | 4731 | { |
4732 | if (s->refcount > 1) | ||
4733 | return -EINVAL; | ||
4734 | |||
4724 | s->flags &= ~SLAB_FAILSLAB; | 4735 | s->flags &= ~SLAB_FAILSLAB; |
4725 | if (buf[0] == '1') | 4736 | if (buf[0] == '1') |
4726 | s->flags |= SLAB_FAILSLAB; | 4737 | s->flags |= SLAB_FAILSLAB; |