From e13d6e861189b3fb836e051a3355c7ac0b729c9b Mon Sep 17 00:00:00 2001 From: Mrunal Patel Date: Thu, 15 Sep 2016 13:24:39 -0400 Subject: [PATCH] Add flag to allow getting all mounts for cgroups subsystems Signed-off-by: Mrunal Patel --- utils.go | 16 ++++++++++------ utils_test.go | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/utils.go b/utils.go index d4327003..8946dd59 100644 --- a/utils.go +++ b/utils.go @@ -139,7 +139,7 @@ func (m Mount) GetThisCgroupDir(cgroups map[string]string) (string, error) { return getControllerPath(m.Subsystems[0], cgroups) } -func getCgroupMountsHelper(ss map[string]bool, mi io.Reader) ([]Mount, error) { +func getCgroupMountsHelper(ss map[string]bool, mi io.Reader, all bool) ([]Mount, error) { res := make([]Mount, 0, len(ss)) scanner := bufio.NewScanner(mi) numFound := 0 @@ -166,7 +166,9 @@ func getCgroupMountsHelper(ss map[string]bool, mi io.Reader) ([]Mount, error) { } else { m.Subsystems = append(m.Subsystems, opt) } - numFound++ + if !all { + numFound++ + } } res = append(res, m) } @@ -176,23 +178,25 @@ func getCgroupMountsHelper(ss map[string]bool, mi io.Reader) ([]Mount, error) { return res, nil } -func GetCgroupMounts() ([]Mount, error) { +// GetCgroupMounts returns the mounts for the cgroup subsystems. +// all indicates whether to return just the first instance or all the mounts. +func GetCgroupMounts(all bool) ([]Mount, error) { f, err := os.Open("/proc/self/mountinfo") if err != nil { return nil, err } defer f.Close() - all, err := ParseCgroupFile("/proc/self/cgroup") + allSubsystems, err := ParseCgroupFile("/proc/self/cgroup") if err != nil { return nil, err } allMap := make(map[string]bool) - for s := range all { + for s := range allSubsystems { allMap[s] = true } - return getCgroupMountsHelper(allMap, f) + return getCgroupMountsHelper(allMap, f, all) } // GetAllSubsystems returns all the cgroup subsystems supported by the kernel diff --git a/utils_test.go b/utils_test.go index 66414079..eb6c8ce9 100644 --- a/utils_test.go +++ b/utils_test.go @@ -134,7 +134,7 @@ func TestGetCgroupMounts(t *testing.T) { } for _, td := range testTable { mi := bytes.NewBufferString(td.mountInfo) - cgMounts, err := getCgroupMountsHelper(td.subsystems, mi) + cgMounts, err := getCgroupMountsHelper(td.subsystems, mi, false) if err != nil { t.Fatal(err) } @@ -187,7 +187,7 @@ func BenchmarkGetCgroupMounts(b *testing.B) { b.StopTimer() mi := bytes.NewBufferString(fedoraMountinfo) b.StartTimer() - if _, err := getCgroupMountsHelper(subsystems, mi); err != nil { + if _, err := getCgroupMountsHelper(subsystems, mi, false); err != nil { b.Fatal(err) } }