Skip to content

Commit e519ce7

Browse files
ftang1tehcaster
authored andcommitted
mm/slub: add sanity check for slub_min/max_order cmdline setup
Currently there are 2 parameters could be setup from kernel cmdline: slub_min_order and slub_max_order. It's possible that the user configured slub_min_order is bigger than the default slub_max_order [1], which can still take effect, as calculate_oder() will use MAX_ORDER as a fallback to check against, but has some downsides: * the kernel message about SLUB will be strange in showing min/max orders: SLUB: HWalign=64, Order=9-3, MinObjects=0, CPUs=16, Nodes=1 * in calculate_order() called by each slab, the 2 loops of calc_slab_order() will all be meaningless due to slub_min_order is bigger than slub_max_order * prevent future code cleanup like in [2]. Fix it by adding some sanity check to enforce the min/max semantics. [1]. https://lore.kernel.org/lkml/21a0ba8b-bf05-0799-7c78-2a35f8c8d52a@os.amperecomputing.com/ [2]. https://lore.kernel.org/lkml/20230908145302.30320-7-vbabka@suse.cz/ Signed-off-by: Feng Tang <feng.tang@intel.com> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
1 parent 8a749fd commit e519ce7

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

mm/slub.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4711,6 +4711,9 @@ static int __init setup_slub_min_order(char *str)
47114711
{
47124712
get_option(&str, (int *)&slub_min_order);
47134713

4714+
if (slub_min_order > slub_max_order)
4715+
slub_max_order = slub_min_order;
4716+
47144717
return 1;
47154718
}
47164719

@@ -4721,6 +4724,9 @@ static int __init setup_slub_max_order(char *str)
47214724
get_option(&str, (int *)&slub_max_order);
47224725
slub_max_order = min_t(unsigned int, slub_max_order, MAX_ORDER);
47234726

4727+
if (slub_min_order > slub_max_order)
4728+
slub_min_order = slub_max_order;
4729+
47244730
return 1;
47254731
}
47264732

0 commit comments

Comments
 (0)