mirror of
https://github.com/containers/podman
synced 2024-10-20 01:03:51 +00:00
libpod: refine check for empty pod cgroup
rootless containers do not use cgroups on cgroupv1 or if using cgroupfs, so improve the check to account for such configuration. Closes: https://github.com/containers/podman/issues/10800 Closes: https://bugzilla.redhat.com/show_bug.cgi?id=2028243 [NO NEW TESTS NEEDED] it requires rebooting and the rundir on a non tmpfs file system. Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
This commit is contained in:
parent
3f0661639c
commit
8dc2464b03
|
@ -2728,6 +2728,24 @@ func isRootlessCgroupSet(cgroup string) bool {
|
|||
return cgroup != CgroupfsDefaultCgroupParent && filepath.Dir(cgroup) != CgroupfsDefaultCgroupParent
|
||||
}
|
||||
|
||||
func (c *Container) expectPodCgroup() (bool, error) {
|
||||
unified, err := cgroups.IsCgroup2UnifiedMode()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
cgroupManager := c.CgroupManager()
|
||||
switch {
|
||||
case c.config.NoCgroups:
|
||||
return false, nil
|
||||
case cgroupManager == config.SystemdCgroupsManager:
|
||||
return !rootless.IsRootless() || unified, nil
|
||||
case cgroupManager == config.CgroupfsCgroupsManager:
|
||||
return !rootless.IsRootless(), nil
|
||||
default:
|
||||
return false, errors.Wrapf(define.ErrInvalidArg, "invalid cgroup mode %s requested for pods", cgroupManager)
|
||||
}
|
||||
}
|
||||
|
||||
// Get cgroup path in a format suitable for the OCI spec
|
||||
func (c *Container) getOCICgroupPath() (string, error) {
|
||||
unified, err := cgroups.IsCgroup2UnifiedMode()
|
||||
|
|
|
@ -356,7 +356,11 @@ func (r *Runtime) setupContainer(ctx context.Context, ctr *Container) (_ *Contai
|
|||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error retrieving pod %s cgroup", pod.ID())
|
||||
}
|
||||
if podCgroup == "" {
|
||||
expectPodCgroup, err := ctr.expectPodCgroup()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if expectPodCgroup && podCgroup == "" {
|
||||
return nil, errors.Wrapf(define.ErrInternal, "pod %s cgroup is not set", pod.ID())
|
||||
}
|
||||
canUseCgroup := !rootless.IsRootless() || isRootlessCgroupSet(podCgroup)
|
||||
|
|
Loading…
Reference in a new issue