From 23ec6c42c22a7bfd4494b15abc9c3303018dec85 Mon Sep 17 00:00:00 2001 From: Jordan Rife Date: Sat, 16 Sep 2023 18:10:00 +0000 Subject: [PATCH] Handle kmem.limit_in_bytes removal kmem.limit_in_bytes has been removed in upstream linux and this patch is queued to be backported to linux 6.1 stable: - https://lore.kernel.org/linux-mm/20230705134434.GA156754@cmpxchg.org/T/ - https://www.spinics.net/lists/stable-commits/msg316619.html Without this change to libcontainerd, GetStats() will return an error on the latest kernel(s). A downstream effect is that Kubernetes's kubelet does not start up. This fix was tested by ensuring that it unblocks kubelet startup when running on the latest kernel. Signed-off-by: Jordan Rife --- libcontainer/cgroups/fs/memory.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libcontainer/cgroups/fs/memory.go b/libcontainer/cgroups/fs/memory.go index b7c75f94..a0e78074 100644 --- a/libcontainer/cgroups/fs/memory.go +++ b/libcontainer/cgroups/fs/memory.go @@ -234,6 +234,12 @@ func getMemoryData(path, name string) (cgroups.MemoryData, error) { memoryData.Failcnt = value value, err = fscommon.GetCgroupParamUint(path, limit) if err != nil { + if name == "kmem" && os.IsNotExist(err) { + // Ignore ENOENT as kmem.limit_in_bytes has + // been removed in newer kernels. + return memoryData, nil + } + return cgroups.MemoryData{}, err } memoryData.Limit = value -- 2.33.0