2023-01-05 17:11:59 +08:00
|
|
|
From 71c298bc54c68714bde5f4aad293f2fa603ede3e Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: zhongjiawei <zhongjiawei1@huawei.com>
|
|
|
|
|
Date: Thu, 5 Jan 2023 16:43:03 +0800
|
2022-10-26 16:13:47 +08:00
|
|
|
Subject: [PATCH] runc:add log message for cgroup file check
|
|
|
|
|
|
|
|
|
|
---
|
2023-01-05 17:11:59 +08:00
|
|
|
libcontainer/cgroups/file.go | 7 ++++++-
|
|
|
|
|
libcontainer/cgroups/fs/cpuset.go | 31 +++++++++++++++++++++++--------
|
2022-10-26 16:13:47 +08:00
|
|
|
2 files changed, 29 insertions(+), 9 deletions(-)
|
|
|
|
|
|
2023-01-05 17:11:59 +08:00
|
|
|
diff --git a/libcontainer/cgroups/file.go b/libcontainer/cgroups/file.go
|
2022-10-26 16:13:47 +08:00
|
|
|
index 0cdaf74..bc7f0a3 100644
|
2023-01-05 17:11:59 +08:00
|
|
|
--- a/libcontainer/cgroups/file.go
|
|
|
|
|
+++ b/libcontainer/cgroups/file.go
|
2022-10-26 16:13:47 +08:00
|
|
|
@@ -51,7 +51,12 @@ func WriteFile(dir, file, data string) error {
|
|
|
|
|
defer fd.Close()
|
|
|
|
|
if err := retryingWriteFile(fd, data); err != nil {
|
|
|
|
|
// Having data in the error message helps in debugging.
|
|
|
|
|
- return fmt.Errorf("failed to write %q: %w", data, err)
|
|
|
|
|
+ ret := fmt.Errorf("failed to write %v to %v: %v", data, file, err)
|
|
|
|
|
+ if _, err = os.Stat(dir); err != nil {
|
|
|
|
|
+ ret = fmt.Errorf("%v, failed to stat %v, %v", ret, dir, err)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return ret
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
}
|
2023-01-05 17:11:59 +08:00
|
|
|
diff --git a/libcontainer/cgroups/fs/cpuset.go b/libcontainer/cgroups/fs/cpuset.go
|
2022-10-26 16:13:47 +08:00
|
|
|
index 341d5dc..ef1f633 100644
|
2023-01-05 17:11:59 +08:00
|
|
|
--- a/libcontainer/cgroups/fs/cpuset.go
|
|
|
|
|
+++ b/libcontainer/cgroups/fs/cpuset.go
|
2022-10-26 16:13:47 +08:00
|
|
|
@@ -25,14 +25,23 @@ func (s *CpusetGroup) Apply(path string, r *configs.Resources, pid int) error {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *CpusetGroup) Set(path string, r *configs.Resources) error {
|
|
|
|
|
+ var ret error
|
|
|
|
|
if r.CpusetCpus != "" {
|
|
|
|
|
if err := cgroups.WriteFile(path, "cpuset.cpus", r.CpusetCpus); err != nil {
|
|
|
|
|
- return err
|
|
|
|
|
+ ret = fmt.Errorf("failed to set cpuset.cpus, %v", err)
|
|
|
|
|
+ if _, err := os.Stat(path); err != nil {
|
|
|
|
|
+ ret = fmt.Errorf("%v, failed to stat %v, %v", ret, path, err)
|
|
|
|
|
+ }
|
|
|
|
|
+ return ret
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if r.CpusetMems != "" {
|
|
|
|
|
if err := cgroups.WriteFile(path, "cpuset.mems", r.CpusetMems); err != nil {
|
|
|
|
|
- return err
|
|
|
|
|
+ ret = fmt.Errorf("failed to set cpuset.mems, %v", err)
|
|
|
|
|
+ if _, err := os.Stat(path); err != nil {
|
|
|
|
|
+ ret = fmt.Errorf("%v, failed to stat %v, %v", ret, path, err)
|
|
|
|
|
+ }
|
|
|
|
|
+ return ret
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return nil
|
|
|
|
|
@@ -231,13 +240,19 @@ func cpusetEnsureParent(current string) error {
|
|
|
|
|
// cpusetCopyIfNeeded copies the cpuset.cpus and cpuset.mems from the parent
|
|
|
|
|
// directory to the current directory if the file's contents are 0
|
|
|
|
|
func cpusetCopyIfNeeded(current, parent string) error {
|
|
|
|
|
- currentCpus, currentMems, err := getCpusetSubsystemSettings(current)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return err
|
|
|
|
|
+ if currentCpus, currentMems, err := getCpusetSubsystemSettings(current); err != nil {
|
|
|
|
|
+ ret := fmt.Errorf("failed copy current cgroup setting, %v", err)
|
|
|
|
|
+ if _, err := os.Stat(current); err != nil {
|
|
|
|
|
+ ret = fmt.Errorf("%v, %v", ret, err)
|
|
|
|
|
+ }
|
|
|
|
|
+ return ret
|
|
|
|
|
}
|
|
|
|
|
- parentCpus, parentMems, err := getCpusetSubsystemSettings(parent)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return err
|
|
|
|
|
+ if parentCpus, parentMems, err := getCpusetSubsystemSettings(parent); err != nil {
|
|
|
|
|
+ ret := fmt.Errorf("failed copy parent cgroup setting, %v", err)
|
|
|
|
|
+ if _, err := os.Stat(parent); err != nil {
|
|
|
|
|
+ ret = fmt.Errorf("%v, %v", ret, err)
|
|
|
|
|
+ }
|
|
|
|
|
+ return ret
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if isEmptyCpuset(currentCpus) {
|
|
|
|
|
--
|
|
|
|
|
2.30.0
|
|
|
|
|
|