summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWei Yang <weiyang@linux.vnet.ibm.com>2015-11-06 05:45:51 +0300
committerLinus Torvalds <torvalds@linux-foundation.org>2015-11-06 06:34:48 +0300
commit9f835703ea67633617ca82bc150f6ee70831b40a (patch)
treeb1fba922a9e90334d757f8fa2e8b9f392ef1b6bf
parent033fd1bd3c50fdda267d27d02f9bc656f0b9ddb8 (diff)
downloadlinux-9f835703ea67633617ca82bc150f6ee70831b40a.tar.xz
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>
-rw-r--r--mm/slub.c6
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;