mm/slub: calculate start order with reserved in consideration
[firefly-linux-kernel-4.4.55.git] / mm / slub.c
index e309ed140fd18c067edacae0c7b7150cc20c6df6..e1bb147827ef231638ca640af7ec4d29d2e3855d 100644 (file)
--- 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;