Commit 1456ebb2 authored by Matt Bobrowski's avatar Matt Bobrowski Committed by Alexei Starovoitov
Browse files

selftests/bpf: cover BPF_CGROUP_ITER_CHILDREN control option



Extend some of the existing CSS iterator selftests such that they
cover the newly introduced BPF_CGROUP_ITER_CHILDREN iterator control
option.

Signed-off-by: default avatarMatt Bobrowski <mattbobrowski@google.com>
Link: https://lore.kernel.org/r/20260127085112.3608687-2-mattbobrowski@google.com


Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 752b8070
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -190,6 +190,16 @@ static void test_walk_self_only(struct cgroup_iter *skel)
			      BPF_CGROUP_ITER_SELF_ONLY, "self_only");
}

static void test_walk_children(struct cgroup_iter *skel)
{
	snprintf(expected_output, sizeof(expected_output),
		 PROLOGUE "%8llu\n%8llu\n" EPILOGUE, cg_id[CHILD1],
		 cg_id[CHILD2]);

	read_from_cgroup_iter(skel->progs.cgroup_id_printer, cg_fd[PARENT],
			      BPF_CGROUP_ITER_CHILDREN, "children");
}

static void test_walk_dead_self_only(struct cgroup_iter *skel)
{
	DECLARE_LIBBPF_OPTS(bpf_iter_attach_opts, opts);
@@ -325,6 +335,8 @@ void test_cgroup_iter(void)
		test_walk_dead_self_only(skel);
	if (test__start_subtest("cgroup_iter__self_only_css_task"))
		test_walk_self_only_css_task();
	if (test__start_subtest("cgroup_iter__children"))
		test_walk_children(skel);

out:
	cgroup_iter__destroy(skel);
+7 −1
Original line number Diff line number Diff line
@@ -253,6 +253,11 @@ static void subtest_css_iters(void)
		{ "/cg1/cg2" },
		{ "/cg1/cg2/cg3" },
		{ "/cg1/cg2/cg3/cg4" },
		{ "/cg1/cg5" },
		{ "/cg1/cg5/cg6" },
		{ "/cg1/cg7" },
		{ "/cg1/cg7/cg8" },
		{ "/cg1/cg7/cg8/cg9" },
	};
	int err, cg_nr = ARRAY_SIZE(cgs);
	int i;
@@ -284,7 +289,8 @@ static void subtest_css_iters(void)

	ASSERT_EQ(skel->bss->post_order_cnt, cg_nr, "post_order_cnt");
	ASSERT_EQ(skel->bss->last_cg_id, get_cgroup_id(cgs[0].path), "last_cg_id");
	ASSERT_EQ(skel->bss->tree_high, cg_nr - 1, "tree_high");
	ASSERT_EQ(skel->bss->children_cnt, 3, "children_cnt");
	ASSERT_EQ(skel->bss->tree_high, 3, "tree_high");
	iters_css__detach(skel);
cleanup:
	cleanup_cgroup_environment();
+6 −3
Original line number Diff line number Diff line
@@ -12,8 +12,7 @@ char _license[] SEC("license") = "GPL";
pid_t target_pid;
u64 root_cg_id, leaf_cg_id;
u64 first_cg_id, last_cg_id;

int pre_order_cnt, post_order_cnt, tree_high;
int pre_order_cnt, post_order_cnt, children_cnt, tree_high;

struct cgroup *bpf_cgroup_from_id(u64 cgid) __ksym;
void bpf_cgroup_release(struct cgroup *p) __ksym;
@@ -43,7 +42,7 @@ int iter_css_for_each(const void *ctx)
	}
	root_css = &root_cgrp->self;
	leaf_css = &leaf_cgrp->self;
	pre_order_cnt = post_order_cnt = tree_high = 0;
	pre_order_cnt = post_order_cnt = children_cnt = tree_high = 0;
	first_cg_id = last_cg_id = 0;

	bpf_rcu_read_lock();
@@ -60,6 +59,10 @@ int iter_css_for_each(const void *ctx)
			first_cg_id = cur_cgrp->kn->id;
	}

	bpf_for_each(css, pos, root_css, BPF_CGROUP_ITER_CHILDREN) {
		children_cnt++;
	}

	bpf_for_each(css, pos, leaf_css, BPF_CGROUP_ITER_ANCESTORS_UP)
		tree_high++;