cgroup_destroy_locked(9)
π cgroup_destroy_locked(9) β a kernel API manual moment
okay so bestie, welcome to the Kernel API Manual β¨ this one's from the cgroup_destroy_locked(9) page and it's literally the "how do we actually kill a cgroup" lore. buckle up π
πΈ NAME πΈ
cgroup_destroy_locked β destroy @cgrp (called on rmdir) πβ¨
π¦ SYNOPSIS π¦
int cgroup_destroy_locked (struct cgroup *cgrp );
π ARGUMENTS π
cgrpβ the cgroup to be destroyed, bestie. this is the one getting torn down π«Ά
π DESCRIPTION π
so like, this function tears down cgrp on behalf of rmdir β no cap, that's the whole vibe. but there are constraints, and they are not optional π
- Userspace:
rmdirmust succeed whencgroup.procsand friends are empty. periodt. that's the promise π - Kernel: subsystem
->css_offlinemust not run while any task incgrp's subtree is still doing kernel work. and listen β a task hidden fromcgroup.procs(pastexit_signalswithsignal->livecleared) can still schedule, allocate, and consume resources until its final context switch π so like, "invisible" doesn't mean "gone". dying descendants in the subtree can host such tasks too, fr fr. - Kernel:
css_tryget_onlinemust fail by the time->css_offlineruns. non-negotiable β
π§ the destruction runs in three parts π§
- This function: synchronous user-visible state teardown plus
kill_css_syncon each subsystem css π₯ - For each subsys css: fire
kill_css_finishsynchronously if the subtree is already drained, otherwise rely oncss_update_populatedto queuekill_finish_workwhen the last populated cset under the css empties π - The percpu_ref kill chain:
css_killed_ref_fn->css_killed_work_fn->->css_offline-> release/free π
ngl the return values matter here: return0on success,-EBUSYif a userspace-visible task or an online child remains π
β SEE ALSO β
Kernel file ./kernel/cgroup/cgroup.c β and look at this absolute iconic list of friends, iykyk:
cgroup_ssid_enabled(9), cgroup_on_dfl(9), cgroup_e_css_by_mask(9), cgroup_e_css(9), cgroup_get_e_css(9), __cgroup_task_count(9), cgroup_task_count(9), for_each_css(9), do_each_subsys_mask(9), css_set_populated(9), css_update_populated(9), css_set_update_populated(9), css_set_move_task(9), compare_css_sets(9), find_existing_css_set(9), allocate_cgrp_cset_links(9), link_css_set(9), find_css_set(9), cgroup_file_mode(9), cgroup_calc_subtree_ss_mask(9), cgroup_kn_unlock(9), cgroup_kn_lock_live(9), css_clear_dir(9), css_populate_dir(9), cgroup_attach_lock(9), cgroup_attach_unlock(9), cgroup_migrate_add_task(9), cgroup_taskset_first(9), cgroup_taskset_next(9), cgroup_migrate_execute(9), cgroup_migrate_vet_dst(9), cgroup_migrate_finish(9), cgroup_migrate_add_src(9), cgroup_migrate_prepare_dst(9), cgroup_migrate(9), cgroup_attach_task(9), cgroup_update_dfl_csses(9), cgroup_lock_and_drain_offline(9), cgroup_save_control(9), cgroup_propagate_control(9), cgroup_restore_control(9), cgroup_apply_control_enable(9), cgroup_apply_control_disable(9), cgroup_apply_control(9), cgroup_finalize_control(9), cgroup_enable_threaded(9), cgroup_tryget_css(9), cgroup_addrm_files(9), cgroup_rm_cftypes(9), cgroup_add_cftypes(9), cgroup_add_dfl_cftypes(9), cgroup_add_legacy_cftypes(9), cgroup_file_notify(9), cgroup_file_show(9), css_next_child(9), css_next_descendant_pre(9), css_rightmost_descendant(9), css_next_descendant_post(9), css_has_online_children(9), css_task_iter_advance_css_set(9), css_task_iter_start(9), css_task_iter_next(9), css_task_iter_end(9), css_create(9), kill_css_sync(9), kill_css_finish(9), cgroup_init_early(9), cgroup_init(9), cgroup_fork(9), cgroup_v1v2_get_from_file(9), cgroup_get_from_file(9), cgroup_css_set_fork(9), cgroup_css_set_put_fork(9), cgroup_can_fork(9), cgroup_cancel_fork(9), cgroup_post_fork(9), cgroup_task_exit(9), css_tryget_online_from_dir(9), css_from_id(9), cgroup_get_from_path(9), cgroup_v1v2_get_from_fd(9), cgroup_get_from_fd(9), cgroup_parse_float(9)
and that's the whole page, bestie π«Ά sign-off time: this one lives under ./kernel/cgroup, dated October 2026, and it's literally cgroup_destroy_locked(9) β main character energy from the kernel API manual πβ¨πΈ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms