diff --git a/pkg/cgroups/cgroups.go b/pkg/cgroups/cgroups.go index 81e3eb551a..86623845ae 100644 --- a/pkg/cgroups/cgroups.go +++ b/pkg/cgroups/cgroups.go @@ -20,6 +20,7 @@ type Cgroup struct { CpuQuota int64 `json:"cpu_quota,omitempty"` // CPU hardcap limit (in usecs). Allowed cpu time in a given period. CpuPeriod int64 `json:"cpu_period,omitempty"` // CPU period to be used for hardcapping (in usecs). 0 to use system default. CpusetCpus string `json:"cpuset_cpus,omitempty"` // CPU to use + Freezer string `json:"freezer,omitempty"` // set the freeze value for the process UnitProperties [][2]string `json:"unit_properties,omitempty"` // systemd unit properties } diff --git a/pkg/cgroups/fs/freezer.go b/pkg/cgroups/fs/freezer.go index ebf5bb9672..70cfcdde72 100644 --- a/pkg/cgroups/fs/freezer.go +++ b/pkg/cgroups/fs/freezer.go @@ -2,21 +2,31 @@ package fs import ( "fmt" - "github.com/dotcloud/docker/pkg/cgroups" "io/ioutil" "os" "path/filepath" "strconv" "strings" + + "github.com/dotcloud/docker/pkg/cgroups" ) type freezerGroup struct { } func (s *freezerGroup) Set(d *data) error { - // we just want to join this group even though we don't set anything - if _, err := d.join("freezer"); err != nil && err != cgroups.ErrNotFound { - return err + dir, err := d.join("freezer") + if err != nil { + if err != cgroups.ErrNotFound { + return err + } + return nil + } + + if d.c.Freezer != "" { + if err := writeFile(dir, "freezer.state", d.c.Freezer); err != nil { + return err + } } return nil }