Pablo Greco 40546a
From 2b27d54de68a4581a9b46fe5c399b45c0014fcbd Mon Sep 17 00:00:00 2001
Pablo Greco 40546a
Message-Id: <2b27d54de68a4581a9b46fe5c399b45c0014fcbd@dist-git>
Pablo Greco 40546a
From: Pavel Hrdina <phrdina@redhat.com>
Pablo Greco 40546a
Date: Mon, 1 Jul 2019 17:07:10 +0200
Pablo Greco 40546a
Subject: [PATCH] vircgroupv1: fix build on non-linux OSes
Pablo Greco 40546a
MIME-Version: 1.0
Pablo Greco 40546a
Content-Type: text/plain; charset=UTF-8
Pablo Greco 40546a
Content-Transfer-Encoding: 8bit
Pablo Greco 40546a
Pablo Greco 40546a
Cgroups are linux specific and we need to make sure that the code is
Pablo Greco 40546a
compiled only on linux.  On different OSes it fails the compilation:
Pablo Greco 40546a
Pablo Greco 40546a
../../src/util/vircgroupv1.c:65:19: error: variable has incomplete type 'struct mntent'
Pablo Greco 40546a
    struct mntent entry;
Pablo Greco 40546a
                  ^
Pablo Greco 40546a
../../src/util/vircgroupv1.c:65:12: note: forward declaration of 'struct mntent'
Pablo Greco 40546a
    struct mntent entry;
Pablo Greco 40546a
           ^
Pablo Greco 40546a
../../src/util/vircgroupv1.c:74:12: error: implicit declaration of function 'getmntent_r' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
Pablo Greco 40546a
    while (getmntent_r(mounts, &entry, buf, sizeof(buf)) != NULL) {
Pablo Greco 40546a
           ^
Pablo Greco 40546a
../../src/util/vircgroupv1.c:814:39: error: use of undeclared identifier 'MS_NOSUID'
Pablo Greco 40546a
    if (mount("tmpfs", root, "tmpfs", MS_NOSUID|MS_NODEV|MS_NOEXEC, opts) < 0) {
Pablo Greco 40546a
                                      ^
Pablo Greco 40546a
../../src/util/vircgroupv1.c:814:49: error: use of undeclared identifier 'MS_NODEV'
Pablo Greco 40546a
    if (mount("tmpfs", root, "tmpfs", MS_NOSUID|MS_NODEV|MS_NOEXEC, opts) < 0) {
Pablo Greco 40546a
                                                ^
Pablo Greco 40546a
../../src/util/vircgroupv1.c:814:58: error: use of undeclared identifier 'MS_NOEXEC'
Pablo Greco 40546a
    if (mount("tmpfs", root, "tmpfs", MS_NOSUID|MS_NODEV|MS_NOEXEC, opts) < 0) {
Pablo Greco 40546a
                                                         ^
Pablo Greco 40546a
../../src/util/vircgroupv1.c:841:65: error: use of undeclared identifier 'MS_BIND'
Pablo Greco 40546a
            if (mount(src, group->legacy[i].mountPoint, "none", MS_BIND,
Pablo Greco 40546a
                                                                ^
Pablo Greco 40546a
Pablo Greco 40546a
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Pablo Greco 40546a
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Pablo Greco 40546a
(cherry picked from commit 0615c8436ac868889454bee2781b6c9993518597)
Pablo Greco 40546a
Pablo Greco 40546a
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1689297
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Pablo Greco 40546a
Message-Id: <a1b4d0cfa90a65f5c431a388e6f51be2ab9a7cdd.1561993100.git.phrdina@redhat.com>
Pablo Greco 40546a
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Pablo Greco 40546a
---
Pablo Greco 40546a
 src/util/vircgroupv1.c | 20 +++++++++++++++-----
Pablo Greco 40546a
 1 file changed, 15 insertions(+), 5 deletions(-)
Pablo Greco 40546a
Pablo Greco 40546a
diff --git a/src/util/vircgroupv1.c b/src/util/vircgroupv1.c
Pablo Greco 40546a
index 482615f3c8..97d108d3ac 100644
Pablo Greco 40546a
--- a/src/util/vircgroupv1.c
Pablo Greco 40546a
+++ b/src/util/vircgroupv1.c
Pablo Greco 40546a
@@ -20,13 +20,11 @@
Pablo Greco 40546a
  */
Pablo Greco 40546a
 #include <config.h>
Pablo Greco 40546a
 
Pablo Greco 40546a
-#if defined HAVE_MNTENT_H && defined HAVE_GETMNTENT_R
Pablo Greco 40546a
+#ifdef __linux__
Pablo Greco 40546a
 # include <mntent.h>
Pablo Greco 40546a
-#endif
Pablo Greco 40546a
-#include <sys/stat.h>
Pablo Greco 40546a
-#if defined HAVE_SYS_MOUNT_H
Pablo Greco 40546a
+# include <sys/stat.h>
Pablo Greco 40546a
 # include <sys/mount.h>
Pablo Greco 40546a
-#endif
Pablo Greco 40546a
+#endif /* __linux__ */
Pablo Greco 40546a
 
Pablo Greco 40546a
 #include "internal.h"
Pablo Greco 40546a
 
Pablo Greco 40546a
@@ -56,6 +54,8 @@ VIR_ENUM_IMPL(virCgroupV1Controller, VIR_CGROUP_CONTROLLER_LAST,
Pablo Greco 40546a
               "name=systemd");
Pablo Greco 40546a
 
Pablo Greco 40546a
 
Pablo Greco 40546a
+#ifdef __linux__
Pablo Greco 40546a
+
Pablo Greco 40546a
 /* We're looking for at least one 'cgroup' fs mount,
Pablo Greco 40546a
  * which is *not* a named mount. */
Pablo Greco 40546a
 static bool
Pablo Greco 40546a
@@ -2100,3 +2100,13 @@ virCgroupV1Register(void)
Pablo Greco 40546a
 {
Pablo Greco 40546a
     virCgroupBackendRegister(&virCgroupV1Backend);
Pablo Greco 40546a
 }
Pablo Greco 40546a
+
Pablo Greco 40546a
+#else /* !__linux__ */
Pablo Greco 40546a
+
Pablo Greco 40546a
+void
Pablo Greco 40546a
+virCgroupV1Register(void)
Pablo Greco 40546a
+{
Pablo Greco 40546a
+    VIR_INFO("Control groups not supported on this platform");
Pablo Greco 40546a
+}
Pablo Greco 40546a
+
Pablo Greco 40546a
+#endif /* !__linux__ */
Pablo Greco 40546a
-- 
Pablo Greco 40546a
2.22.0
Pablo Greco 40546a