mirror of https://github.com/torvalds/linux.git
lib: test_objagg: split test_hints_case() into two functions
With sanitizers enabled, this function uses a lot of stack, causing a harmless warning: lib/test_objagg.c: In function 'test_hints_case.constprop': lib/test_objagg.c:994:1: error: the frame size of 1440 bytes is larger than 1408 bytes [-Werror=frame-larger-than=] Most of this is from the two 'struct world' structures. Since most of the work in this function is duplicated for the two, split it up into separate functions that each use one of them. The combined stack usage is still the same here, but there is no warning any more, and the code is still safe because of the known call chain. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Link: https://patch.msgid.link/20250620111907.3395296-1-arnd@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
b04202d606
commit
7df6c02455
|
|
@ -906,50 +906,22 @@ static int check_expect_hints_stats(struct objagg_hints *objagg_hints,
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int test_hints_case(const struct hints_case *hints_case)
|
static int test_hints_case2(const struct hints_case *hints_case,
|
||||||
|
struct objagg_hints *hints, struct objagg *objagg)
|
||||||
{
|
{
|
||||||
struct objagg_obj *objagg_obj;
|
struct objagg_obj *objagg_obj;
|
||||||
struct objagg_hints *hints;
|
|
||||||
struct world world2 = {};
|
struct world world2 = {};
|
||||||
struct world world = {};
|
|
||||||
struct objagg *objagg2;
|
struct objagg *objagg2;
|
||||||
struct objagg *objagg;
|
|
||||||
const char *errmsg;
|
const char *errmsg;
|
||||||
int i;
|
int i;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
objagg = objagg_create(&delta_ops, NULL, &world);
|
|
||||||
if (IS_ERR(objagg))
|
|
||||||
return PTR_ERR(objagg);
|
|
||||||
|
|
||||||
for (i = 0; i < hints_case->key_ids_count; i++) {
|
|
||||||
objagg_obj = world_obj_get(&world, objagg,
|
|
||||||
hints_case->key_ids[i]);
|
|
||||||
if (IS_ERR(objagg_obj)) {
|
|
||||||
err = PTR_ERR(objagg_obj);
|
|
||||||
goto err_world_obj_get;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pr_debug_stats(objagg);
|
|
||||||
err = check_expect_stats(objagg, &hints_case->expect_stats, &errmsg);
|
|
||||||
if (err) {
|
|
||||||
pr_err("Stats: %s\n", errmsg);
|
|
||||||
goto err_check_expect_stats;
|
|
||||||
}
|
|
||||||
|
|
||||||
hints = objagg_hints_get(objagg, OBJAGG_OPT_ALGO_SIMPLE_GREEDY);
|
|
||||||
if (IS_ERR(hints)) {
|
|
||||||
err = PTR_ERR(hints);
|
|
||||||
goto err_hints_get;
|
|
||||||
}
|
|
||||||
|
|
||||||
pr_debug_hints_stats(hints);
|
pr_debug_hints_stats(hints);
|
||||||
err = check_expect_hints_stats(hints, &hints_case->expect_stats_hints,
|
err = check_expect_hints_stats(hints, &hints_case->expect_stats_hints,
|
||||||
&errmsg);
|
&errmsg);
|
||||||
if (err) {
|
if (err) {
|
||||||
pr_err("Hints stats: %s\n", errmsg);
|
pr_err("Hints stats: %s\n", errmsg);
|
||||||
goto err_check_expect_hints_stats;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
objagg2 = objagg_create(&delta_ops, hints, &world2);
|
objagg2 = objagg_create(&delta_ops, hints, &world2);
|
||||||
|
|
@ -981,7 +953,48 @@ static int test_hints_case(const struct hints_case *hints_case)
|
||||||
world_obj_put(&world2, objagg, hints_case->key_ids[i]);
|
world_obj_put(&world2, objagg, hints_case->key_ids[i]);
|
||||||
i = hints_case->key_ids_count;
|
i = hints_case->key_ids_count;
|
||||||
objagg_destroy(objagg2);
|
objagg_destroy(objagg2);
|
||||||
err_check_expect_hints_stats:
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int test_hints_case(const struct hints_case *hints_case)
|
||||||
|
{
|
||||||
|
struct objagg_obj *objagg_obj;
|
||||||
|
struct objagg_hints *hints;
|
||||||
|
struct world world = {};
|
||||||
|
struct objagg *objagg;
|
||||||
|
const char *errmsg;
|
||||||
|
int i;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
objagg = objagg_create(&delta_ops, NULL, &world);
|
||||||
|
if (IS_ERR(objagg))
|
||||||
|
return PTR_ERR(objagg);
|
||||||
|
|
||||||
|
for (i = 0; i < hints_case->key_ids_count; i++) {
|
||||||
|
objagg_obj = world_obj_get(&world, objagg,
|
||||||
|
hints_case->key_ids[i]);
|
||||||
|
if (IS_ERR(objagg_obj)) {
|
||||||
|
err = PTR_ERR(objagg_obj);
|
||||||
|
goto err_world_obj_get;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pr_debug_stats(objagg);
|
||||||
|
err = check_expect_stats(objagg, &hints_case->expect_stats, &errmsg);
|
||||||
|
if (err) {
|
||||||
|
pr_err("Stats: %s\n", errmsg);
|
||||||
|
goto err_check_expect_stats;
|
||||||
|
}
|
||||||
|
|
||||||
|
hints = objagg_hints_get(objagg, OBJAGG_OPT_ALGO_SIMPLE_GREEDY);
|
||||||
|
if (IS_ERR(hints)) {
|
||||||
|
err = PTR_ERR(hints);
|
||||||
|
goto err_hints_get;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = test_hints_case2(hints_case, hints, objagg);
|
||||||
|
|
||||||
objagg_hints_put(hints);
|
objagg_hints_put(hints);
|
||||||
err_hints_get:
|
err_hints_get:
|
||||||
err_check_expect_stats:
|
err_check_expect_stats:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue