Loading mm/slab.c +12 −12 Original line number Diff line number Diff line Loading @@ -1628,36 +1628,36 @@ static inline size_t calculate_slab_order(struct kmem_cache *cachep, size_t size, size_t align, unsigned long flags) { size_t left_over = 0; int gfporder; for (;; cachep->gfporder++) { for (gfporder = 0 ; gfporder <= MAX_GFP_ORDER; gfporder++) { unsigned int num; size_t remainder; if (cachep->gfporder > MAX_GFP_ORDER) { cachep->num = 0; break; } cache_estimate(cachep->gfporder, size, align, flags, &remainder, &num); cache_estimate(gfporder, size, align, flags, &remainder, &num); if (!num) continue; /* More than offslab_limit objects will cause problems */ if (flags & CFLGS_OFF_SLAB && cachep->num > offslab_limit) if ((flags & CFLGS_OFF_SLAB) && num > offslab_limit) break; /* Found something acceptable - save it away */ cachep->num = num; cachep->gfporder = gfporder; left_over = remainder; /* * Large number of objects is good, but very large slabs are * currently bad for the gfp()s. */ if (cachep->gfporder >= slab_break_gfp_order) if (gfporder >= slab_break_gfp_order) break; if ((left_over * 8) <= (PAGE_SIZE << cachep->gfporder)) /* Acceptable internal fragmentation */ /* * Acceptable internal fragmentation? */ if ((left_over * 8) <= (PAGE_SIZE << gfporder)) break; } return left_over; Loading Loading
mm/slab.c +12 −12 Original line number Diff line number Diff line Loading @@ -1628,36 +1628,36 @@ static inline size_t calculate_slab_order(struct kmem_cache *cachep, size_t size, size_t align, unsigned long flags) { size_t left_over = 0; int gfporder; for (;; cachep->gfporder++) { for (gfporder = 0 ; gfporder <= MAX_GFP_ORDER; gfporder++) { unsigned int num; size_t remainder; if (cachep->gfporder > MAX_GFP_ORDER) { cachep->num = 0; break; } cache_estimate(cachep->gfporder, size, align, flags, &remainder, &num); cache_estimate(gfporder, size, align, flags, &remainder, &num); if (!num) continue; /* More than offslab_limit objects will cause problems */ if (flags & CFLGS_OFF_SLAB && cachep->num > offslab_limit) if ((flags & CFLGS_OFF_SLAB) && num > offslab_limit) break; /* Found something acceptable - save it away */ cachep->num = num; cachep->gfporder = gfporder; left_over = remainder; /* * Large number of objects is good, but very large slabs are * currently bad for the gfp()s. */ if (cachep->gfporder >= slab_break_gfp_order) if (gfporder >= slab_break_gfp_order) break; if ((left_over * 8) <= (PAGE_SIZE << cachep->gfporder)) /* Acceptable internal fragmentation */ /* * Acceptable internal fragmentation? */ if ((left_over * 8) <= (PAGE_SIZE << gfporder)) break; } return left_over; Loading