]> git.ipfire.org Git - thirdparty/linux.git/commit
cgroup: Eliminate cgrp_ancestor_storage in cgroup_root
authorMichal Koutný <mkoutny@suse.com>
Wed, 7 Jan 2026 16:59:41 +0000 (17:59 +0100)
committerTejun Heo <tj@kernel.org>
Thu, 8 Jan 2026 01:11:03 +0000 (15:11 -1000)
commitef56578274d2b98423c8ef82bb450223f5811b59
tree926a26cfe8c758ea22b495f946f19780e47db063
parentaa7d3a56a20f07978d9f401e13637a6479b13bd0
cgroup: Eliminate cgrp_ancestor_storage in cgroup_root

The cgrp_ancestor_storage has two drawbacks:
- it's not guaranteed that the member immediately follows struct cgrp in
  cgroup_root (root cgroup's ancestors[0] might thus point to a padding
  and not in cgrp_ancestor_storage proper),
- this idiom raises warnings with -Wflex-array-member-not-at-end.

Instead of relying on the auxiliary member in cgroup_root, define the
0-th level ancestor inside struct cgroup (needed for static allocation
of cgrp_dfl_root), deeper cgroups would allocate flexible
_low_ancestors[].  Unionized alias through ancestors[] will
transparently join the two ranges.

The above change would still leave the flexible array at the end of
struct cgroup inside cgroup_root, so move cgrp also towards the end of
cgroup_root to resolve the -Wflex-array-member-not-at-end.

Link: https://lore.kernel.org/r/5fb74444-2fbb-476e-b1bf-3f3e279d0ced@embeddedor.com/
Reported-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Closes: https://lore.kernel.org/r/b3eb050d-9451-4b60-b06c-ace7dab57497@embeddedor.com/
Cc: David Laight <david.laight.linux@gmail.com>
Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Signed-off-by: Michal Koutný <mkoutny@suse.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
include/linux/cgroup-defs.h
kernel/cgroup/cgroup.c