From b1ce4fa3b6b8c423716b4ee6cbb56d12a438d737 Mon Sep 17 00:00:00 2001 From: Vladimir Kobal Date: Thu, 6 May 2021 17:02:02 +0300 Subject: [PATCH] Check the version of the default cgroup mountpoint (#11102) --- collectors/cgroups.plugin/sys_fs_cgroup.c | 17 +++++++++++++++-- configure.ac | 1 + libnetdata/libnetdata.h | 4 ++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/collectors/cgroups.plugin/sys_fs_cgroup.c b/collectors/cgroups.plugin/sys_fs_cgroup.c index 332404a1b..eea4d9ae7 100644 --- a/collectors/cgroups.plugin/sys_fs_cgroup.c +++ b/collectors/cgroups.plugin/sys_fs_cgroup.c @@ -160,7 +160,20 @@ static enum cgroups_type cgroups_try_detect_version() if(!cgroups2_available) return CGROUPS_V1; - // 2. check systemd compiletime setting +#if defined CGROUP2_SUPER_MAGIC + // 2. check filesystem type for the default mountpoint + char filename[FILENAME_MAX + 1]; + snprintfz(filename, FILENAME_MAX, "%s%s", netdata_configured_host_prefix, "/sys/fs/cgroup"); + struct statfs fsinfo; + if (!statfs(filename, &fsinfo)) { + if (fsinfo.f_type == CGROUP2_SUPER_MAGIC) + return CGROUPS_V2; + if (fsinfo.f_type == CGROUP_SUPER_MAGIC) + return CGROUPS_V1; + } +#endif + + // 3. check systemd compiletime setting if ((systemd_setting = cgroups_detect_systemd("systemd --version")) == SYSTEMD_CGROUP_ERR) systemd_setting = cgroups_detect_systemd(SYSTEMD_CMD_RHEL); @@ -174,7 +187,7 @@ static enum cgroups_type cgroups_try_detect_version() return CGROUPS_V1; } - // 3. if we are unified as on Fedora (default cgroups2 only mode) + // 4. if we are unified as on Fedora (default cgroups2 only mode) // check kernel command line flag that can override that setting f = fopen("/proc/cmdline", "r"); if (!f) { diff --git a/configure.ac b/configure.ac index 03672c551..031351ab7 100644 --- a/configure.ac +++ b/configure.ac @@ -249,6 +249,7 @@ AC_HEADER_RESOLV AC_CHECK_HEADERS_ONCE([sys/prctl.h]) AC_CHECK_HEADERS_ONCE([sys/vfs.h]) AC_CHECK_HEADERS_ONCE([sys/statfs.h]) +AC_CHECK_HEADERS_ONCE([linux/magic.h]) AC_CHECK_HEADERS_ONCE([sys/statvfs.h]) AC_CHECK_HEADERS_ONCE([sys/mount.h]) diff --git a/libnetdata/libnetdata.h b/libnetdata/libnetdata.h index 5481d003b..77a1bbe7f 100644 --- a/libnetdata/libnetdata.h +++ b/libnetdata/libnetdata.h @@ -118,6 +118,10 @@ extern "C" { #include #endif +#ifdef HAVE_LINUX_MAGIC_H +#include +#endif + #ifdef HAVE_SYS_MOUNT_H #include #endif