cgroup_destroy_locked(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… 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: rmdir must succeed when cgroup.procs and friends are empty. periodt. that's the promise πŸ’…
  • Kernel: subsystem ->css_offline must not run while any task in cgrp's subtree is still doing kernel work. and listen β€” a task hidden from cgroup.procs (past exit_signals with signal->live cleared) 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_online must fail by the time ->css_offline runs. non-negotiable ⭐

🧚 the destruction runs in three parts 🧚

  • This function: synchronous user-visible state teardown plus kill_css_sync on each subsystem css πŸ”₯
  • For each subsys css: fire kill_css_finish synchronously if the subtree is already drained, otherwise rely on css_update_populated to queue kill_finish_work when 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: return 0 on success, -EBUSY if 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