cgroup_on_dfl(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– cgroup_on_dfl πŸ’–

okay so real talk, this is a page from the Kernel API Manual (yes, the kernel has lore) and it's the manual entry for cgroup_on_dfl(9). buckle up bestie, we're going in 🫢


✨ NAME ✨

cgroup_on_dfl β€” test whether a cgroup is on the default hierarchy 🌸


✨ SYNOPSIS ✨

bool cgroup_on_dfl (const struct cgroup *cgrp );

✨ ARGUMENTS ✨

  • cgrp β€” the cgroup of interest πŸ‘€ like, the one you're asking about

✨ DESCRIPTION ✨

okay so the default hierarchy is literally just the v2 interface of cgroup, no cap. and this function is your little vibe check: you hand it a cgroup and it tells you whether that cgroup is on the default hierarchy. why do you care? because sometimes a subsystem needs to act different depending on which interface version it's dealing with β€” it's giving "different personality depending on who's in the room" πŸ’…

here's the list of changed behaviors, and bestie, it's a list:

  • Mount options "noprefix", "xattr", "clone_children", "release_agent" and "name" are disallowed. not invited to the party πŸ™ˆ
  • When mounting an existing superblock, mount options should match.
  • rename(2) is disallowed.
  • "tasks" is removed. everything should be at process granularity. use "cgroup.procs" instead. (tasks? never heard of her.)
  • "cgroup.procs" is not sorted. pids will be unique unless they got recycled in-between reads. so like, don't count on the order, fr fr 😭
  • "release_agent" and "notify_on_release" are removed. a replacement notification mechanism will be implemented. (coming soonβ„’ ✨)
  • "cgroup.clone_children" is removed.
  • "cgroup.subtree_populated" is available. its value is 0 if the cgroup and its descendants contain no task; otherwise, 1. the file also generates kernfs notification which can be monitored through poll and [di]notify when the value of the file changes. iconic behavior honestly πŸ‘‘
  • cpuset: tasks will be kept in empty cpusets when hotplug happens and take masks of ancestors with non-empty cpus/mems, instead of being moved to an ancestor.
  • cpuset: a task can be moved into an empty cpuset, and again it takes masks of ancestors.
  • blkcg: blk-throttle becomes properly hierarchical. slay 🌟
⚠️ heads up bestie: a bunch of these are straight-up removed or disallowed on the default hierarchy. that's not a bug, that's the design. don't go looking for tasks or rename(2), they're not coming back πŸ’€

🌈 SEE ALSO 🌈

the kernel file ./kernel/cgroup/cgroup.c, plus this absolutely enormous friend group of functions (yes, all of them, i'm not skipping a single one, i would never do that to you):

cgroup_ssid_enabled(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_destroy_locked(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 babes πŸŽ€ it lives under ./kernel/cgroup, and this edition is dated October 2026 β€” catch you in the next cgroup_on_dfl(9) era πŸ’œπŸ¦‹

πŸ“¦ where this page comes from