diff options
author | Wei Yang <weiyang@linux.vnet.ibm.com> | 2015-11-06 03:45:51 +0100 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-11-06 04:34:48 +0100 |
commit | 9f835703ea67633617ca82bc150f6ee70831b40a (patch) | |
tree | b1fba922a9e90334d757f8fa2e8b9f392ef1b6bf /mm/slub.c | |
parent | mm/slub: use get_order() instead of fls() (diff) | |
download | linux-9f835703ea67633617ca82bc150f6ee70831b40a.tar.xz linux-9f835703ea67633617ca82bc150f6ee70831b40a.zip |
mm/slub: calculate start order with reserved in consideration
In slub_order(), the order starts from max(min_order,
get_order(min_objects * size)). When (min_objects * size) has different
order from (min_objects * size + reserved), it will skip this order via a
check in the loop.
This patch optimizes this a little by calculating the start order with
`reserved' in consideration and removing the check in loop.
Signed-off-by: Wei Yang <weiyang@linux.vnet.ibm.com>
Acked-by: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>
Cc: David Rientjes <rientjes@google.com>
Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/slub.c')
-rw-r--r-- | mm/slub.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/mm/slub.c b/mm/slub.c index e309ed140fd1..e1bb147827ef 100644 --- a/mm/slub.c +++ b/mm/slub.c @@ -2912,19 +2912,15 @@ static inline int slab_order(int size, int min_objects, if (order_objects(min_order, size, reserved) > MAX_OBJS_PER_PAGE) return get_order(size * MAX_OBJS_PER_PAGE) - 1; - for (order = max(min_order, get_order(min_objects * size)); + for (order = max(min_order, get_order(min_objects * size + reserved)); order <= max_order; order++) { unsigned long slab_size = PAGE_SIZE << order; - if (slab_size < min_objects * size + reserved) - continue; - rem = (slab_size - reserved) % size; if (rem <= slab_size / fract_leftover) break; - } return order; |