#[derive(Default, Debug, Clone, PartialEq, Eq)]
#[derive(Deserialize, Serialize)]
#[serde(default, deny_unknown_fields)]
pub struct RootCgroupConfiguration
{
pub children: ChildrenCgroupConfiguration<BelowRootCgroupConfiguration>,
pub leaf_processes: Migration<ProcessIdentifierChoice>,
pub leaf_threads: Migration<ThreadIdentifierChoice>,
}
impl RootCgroupConfiguration
{
pub(crate) fn configure(&self, mount_point: &CgroupMountPoint, defaults: &DefaultHugePageSizes) -> io::Result<()>
{
let cgroup = Rc::new(RootCgroup);
let (desired_controllers, maximum_depth) = self.desired_controllers_and_our_depth();
let _available_controllers = cgroup.change_subtree_controllers_taking_account_of_those_available(mount_point, &desired_controllers)?;
cgroup.write_maximum_depth(mount_point, MaximumNumber::Finite(maximum_depth))?;
self.children.configure_children(mount_point, &cgroup, defaults)?;
self.leaf_processes.migrate(mount_point, &cgroup);
self.leaf_threads.migrate(mount_point, &cgroup);
Ok(())
}
fn desired_controllers_and_our_depth(&self) -> (Controllers, usize)
{
self.children.desired_controllers_and_our_depth_children(Controllers::default())
}
}