mirror of
https://github.com/kata-containers/cgroups-rs.git
synced 2026-08-05 02:13:23 +00:00
Path of cgroup is wrong when running a container in a container. Use the root path of mountinfo fetched from /proc/$(shim_pid)/mountinfo to trim the path obtained from /proc/self/mountinfo. Fixes: #131 Signed-off-by: 乔琛 10307740 <qiao.chen@zte.com.cn>
73 lines
1.7 KiB
Rust
73 lines
1.7 KiB
Rust
// Copyright (c) 2020 Ant Group
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0 or MIT
|
|
//
|
|
|
|
//! This module contains the implementation of the `systemd` cgroup subsystem.
|
|
//!
|
|
use std::path::PathBuf;
|
|
|
|
use crate::error::*;
|
|
|
|
use crate::{ControllIdentifier, ControllerInternal, Controllers, Resources, Subsystem};
|
|
|
|
/// A controller that allows controlling the `systemd` subsystem of a Cgroup.
|
|
///
|
|
#[derive(Debug, Clone)]
|
|
pub struct SystemdController {
|
|
base: PathBuf,
|
|
path: PathBuf,
|
|
_v2: bool,
|
|
}
|
|
|
|
impl ControllerInternal for SystemdController {
|
|
fn control_type(&self) -> Controllers {
|
|
Controllers::Systemd
|
|
}
|
|
fn get_path(&self) -> &PathBuf {
|
|
&self.path
|
|
}
|
|
fn get_path_mut(&mut self) -> &mut PathBuf {
|
|
&mut self.path
|
|
}
|
|
fn get_base(&self) -> &PathBuf {
|
|
&self.base
|
|
}
|
|
|
|
fn apply(&self, _res: &Resources) -> Result<()> {
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
impl ControllIdentifier for SystemdController {
|
|
fn controller_type() -> Controllers {
|
|
Controllers::Systemd
|
|
}
|
|
}
|
|
|
|
impl<'a> From<&'a Subsystem> for &'a SystemdController {
|
|
fn from(sub: &'a Subsystem) -> &'a SystemdController {
|
|
unsafe {
|
|
match sub {
|
|
Subsystem::Systemd(c) => c,
|
|
_ => {
|
|
assert_eq!(1, 0);
|
|
let v = std::mem::MaybeUninit::uninit();
|
|
v.assume_init()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
impl SystemdController {
|
|
/// Constructs a new `SystemdController` with `root` serving as the root of the control group.
|
|
pub fn new(point: PathBuf, root: PathBuf, v2: bool) -> Self {
|
|
Self {
|
|
base: root,
|
|
path: point,
|
|
_v2: v2,
|
|
}
|
|
}
|
|
}
|