slub: Make the order configurable for each slab cache Makes /sys/kernel/slab//order writable. The allocation order can then be changed dynamically during runtime. Signed-off-by: Christoph Lameter --- mm/slub.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) Index: linux-2.6/mm/slub.c =================================================================== --- linux-2.6.orig/mm/slub.c 2008-02-15 14:32:03.186628435 -0800 +++ linux-2.6/mm/slub.c 2008-02-15 14:39:15.063180225 -0800 @@ -2368,7 +2368,7 @@ static int calculate_sizes(struct kmem_c /* * Determine the number of objects per slab */ - s->objects = (PAGE_SIZE << s->order) / size; + s->objects = max_t(unsigned long, s->objects, (PAGE_SIZE << s->order) / size); s->objects0 = PAGE_SIZE / size; return !!s->objects; @@ -3839,11 +3839,24 @@ static ssize_t objs_per_slab_show(struct } SLAB_ATTR_RO(objs_per_slab); +static ssize_t order_store(struct kmem_cache *s, + const char *buf, size_t length) +{ + int order = simple_strtoul(buf, NULL, 10); + + if (order > slub_max_order) + return -EINVAL; + + s->order = order; + calculate_sizes(s); + return length; +} + static ssize_t order_show(struct kmem_cache *s, char *buf) { return sprintf(buf, "%d\n", s->order); } -SLAB_ATTR_RO(order); +SLAB_ATTR(order); static ssize_t ctor_show(struct kmem_cache *s, char *buf) {