Hi, I was looking into the issue and came up with an alternative solution that changes task iteration to be consistent with cgroup_is_populated() check and moving the responsibility to check PF_EXITING on the consumers of iterator API. I haven't check your approach thoroughly, however, it appears to me it complicates (already non-trivial) cgroup destruction path. I ran your selftest on the iterators approach and it proved working. Michal Koutný (2): cgroup: Unify css_set task lists cgroup: Iterate tasks that did not finish do_exit() Suren Baghdasaryan (1): kselftest/cgroup: add cgroup destruction test include/linux/cgroup-defs.h | 15 ++- include/linux/cgroup.h | 4 +- kernel/cgroup/cgroup.c | 86 ++++++++-------- kernel/cgroup/debug.c | 16 ++- tools/testing/selftests/cgroup/test_core.c | 113 +++++++++++++++++++++ 5 files changed, 176 insertions(+), 58 deletions(-) -- 2.24.1