diff options
Diffstat (limited to 'mm/slub.c')
-rw-r--r-- | mm/slub.c | 11 |
1 files changed, 7 insertions, 4 deletions
@@ -5071,15 +5071,18 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s) | |||
5071 | #ifdef CONFIG_MEMCG_KMEM | 5071 | #ifdef CONFIG_MEMCG_KMEM |
5072 | int i; | 5072 | int i; |
5073 | char *buffer = NULL; | 5073 | char *buffer = NULL; |
5074 | struct kmem_cache *root_cache; | ||
5074 | 5075 | ||
5075 | if (!is_root_cache(s)) | 5076 | if (is_root_cache(s)) |
5076 | return; | 5077 | return; |
5077 | 5078 | ||
5079 | root_cache = s->memcg_params->root_cache; | ||
5080 | |||
5078 | /* | 5081 | /* |
5079 | * This mean this cache had no attribute written. Therefore, no point | 5082 | * This mean this cache had no attribute written. Therefore, no point |
5080 | * in copying default values around | 5083 | * in copying default values around |
5081 | */ | 5084 | */ |
5082 | if (!s->max_attr_size) | 5085 | if (!root_cache->max_attr_size) |
5083 | return; | 5086 | return; |
5084 | 5087 | ||
5085 | for (i = 0; i < ARRAY_SIZE(slab_attrs); i++) { | 5088 | for (i = 0; i < ARRAY_SIZE(slab_attrs); i++) { |
@@ -5101,7 +5104,7 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s) | |||
5101 | */ | 5104 | */ |
5102 | if (buffer) | 5105 | if (buffer) |
5103 | buf = buffer; | 5106 | buf = buffer; |
5104 | else if (s->max_attr_size < ARRAY_SIZE(mbuf)) | 5107 | else if (root_cache->max_attr_size < ARRAY_SIZE(mbuf)) |
5105 | buf = mbuf; | 5108 | buf = mbuf; |
5106 | else { | 5109 | else { |
5107 | buffer = (char *) get_zeroed_page(GFP_KERNEL); | 5110 | buffer = (char *) get_zeroed_page(GFP_KERNEL); |
@@ -5110,7 +5113,7 @@ static void memcg_propagate_slab_attrs(struct kmem_cache *s) | |||
5110 | buf = buffer; | 5113 | buf = buffer; |
5111 | } | 5114 | } |
5112 | 5115 | ||
5113 | attr->show(s->memcg_params->root_cache, buf); | 5116 | attr->show(root_cache, buf); |
5114 | attr->store(s, buf, strlen(buf)); | 5117 | attr->store(s, buf, strlen(buf)); |
5115 | } | 5118 | } |
5116 | 5119 | ||