Create an ApplyDevices call.

For our work on adding dynamic device support to Docker we needed to be
able to call this to update the list of allowed devices.  This works for
both systemd and fs based cgroups implementations.

Co-Authored-By: Chris Alfonso <calfonso@redhat.com> (github: calfonso)
Docker-DCO-1.1-Signed-off-by: Ian Main <imain@redhat.com> (github: imain)
This commit is contained in:
Ian Main 2014-10-14 13:31:23 -07:00
parent 8d1d0ba38a
commit d67a27ee13
3 changed files with 23 additions and 0 deletions

View File

@ -73,6 +73,19 @@ func Apply(c *cgroups.Cgroup, pid int) (cgroups.ActiveCgroup, error) {
return d, nil return d, nil
} }
// Symmetrical public function to update device based cgroups. Also available
// in the systemd implementation.
func ApplyDevices(c *cgroups.Cgroup, pid int) error {
d, err := getCgroupData(c, pid)
if err != nil {
return err
}
devices := subsystems["devices"]
return devices.Set(d)
}
func Cleanup(c *cgroups.Cgroup) error { func Cleanup(c *cgroups.Cgroup) error {
d, err := getCgroupData(c, 0) d, err := getCgroupData(c, 0)
if err != nil { if err != nil {

View File

@ -20,6 +20,10 @@ func GetPids(c *cgroups.Cgroup) ([]int, error) {
return nil, fmt.Errorf("Systemd not supported") return nil, fmt.Errorf("Systemd not supported")
} }
func ApplyDevices(c *cgroups.Cgroup, pid int) error {
return fmt.Errorf("Systemd not supported")
}
func Freeze(c *cgroups.Cgroup, state cgroups.FreezerState) error { func Freeze(c *cgroups.Cgroup, state cgroups.FreezerState) error {
return fmt.Errorf("Systemd not supported") return fmt.Errorf("Systemd not supported")
} }

View File

@ -327,6 +327,12 @@ func joinDevices(c *cgroups.Cgroup, pid int) error {
return nil return nil
} }
// Symmetrical public function to update device based cgroups. Also available
// in the fs implementation.
func ApplyDevices(c *cgroups.Cgroup, pid int) error {
return joinDevices(c, pid)
}
func joinMemory(c *cgroups.Cgroup, pid int) error { func joinMemory(c *cgroups.Cgroup, pid int) error {
memorySwap := c.MemorySwap memorySwap := c.MemorySwap