tests/cgroup: move cg_wait_for(), cg_prepare_for_wait()
authorChristian Brauner <christian.brauner@ubuntu.com>
Sat, 8 May 2021 12:15:41 +0000 (14:15 +0200)
committerTejun Heo <tj@kernel.org>
Mon, 10 May 2021 14:41:11 +0000 (10:41 -0400)
as they will be used by the tests for cgroup killing.

Link: https://lore.kernel.org/r/20210503143922.3093755-4-brauner@kernel.org
Cc: Tejun Heo <tj@kernel.org>
Cc: cgroups@vger.kernel.org
Reviewed-by: Shakeel Butt <shakeelb@google.com>
Acked-by: Roman Gushchin <guro@fb.com>
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
tools/testing/selftests/cgroup/cgroup_util.c
tools/testing/selftests/cgroup/cgroup_util.h
tools/testing/selftests/cgroup/test_freezer.c

index f60f7d7..623cec0 100644 (file)
@@ -5,10 +5,12 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <linux/limits.h>
+#include <poll.h>
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/inotify.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -580,3 +582,48 @@ int clone_into_cgroup_run_wait(const char *cgroup)
        (void)clone_reap(pid, WEXITED);
        return 0;
 }
+
+int cg_prepare_for_wait(const char *cgroup)
+{
+       int fd, ret = -1;
+
+       fd = inotify_init1(0);
+       if (fd == -1)
+               return fd;
+
+       ret = inotify_add_watch(fd, cg_control(cgroup, "cgroup.events"),
+                               IN_MODIFY);
+       if (ret == -1) {
+               close(fd);
+               fd = -1;
+       }
+
+       return fd;
+}
+
+int cg_wait_for(int fd)
+{
+       int ret = -1;
+       struct pollfd fds = {
+               .fd = fd,
+               .events = POLLIN,
+       };
+
+       while (true) {
+               ret = poll(&fds, 1, 10000);
+
+               if (ret == -1) {
+                       if (errno == EINTR)
+                               continue;
+
+                       break;
+               }
+
+               if (ret > 0 && fds.revents & POLLIN) {
+                       ret = 0;
+                       break;
+               }
+       }
+
+       return ret;
+}
index 5a1305d..82e59cd 100644 (file)
@@ -54,3 +54,5 @@ extern pid_t clone_into_cgroup(int cgroup_fd);
 extern int clone_reap(pid_t pid, int options);
 extern int clone_into_cgroup_run_wait(const char *cgroup);
 extern int dirfd_open_opath(const char *dir);
+extern int cg_prepare_for_wait(const char *cgroup);
+extern int cg_wait_for(int fd);
index 23d8fa4..ff51902 100644 (file)
@@ -7,9 +7,7 @@
 #include <unistd.h>
 #include <stdio.h>
 #include <errno.h>
-#include <poll.h>
 #include <stdlib.h>
-#include <sys/inotify.h>
 #include <string.h>
 #include <sys/wait.h>
 
@@ -54,61 +52,6 @@ static int cg_freeze_nowait(const char *cgroup, bool freeze)
        return cg_write(cgroup, "cgroup.freeze", freeze ? "1" : "0");
 }
 
-/*
- * Prepare for waiting on cgroup.events file.
- */
-static int cg_prepare_for_wait(const char *cgroup)
-{
-       int fd, ret = -1;
-
-       fd = inotify_init1(0);
-       if (fd == -1) {
-               debug("Error: inotify_init1() failed\n");
-               return fd;
-       }
-
-       ret = inotify_add_watch(fd, cg_control(cgroup, "cgroup.events"),
-                               IN_MODIFY);
-       if (ret == -1) {
-               debug("Error: inotify_add_watch() failed\n");
-               close(fd);
-               fd = -1;
-       }
-
-       return fd;
-}
-
-/*
- * Wait for an event. If there are no events for 10 seconds,
- * treat this an error.
- */
-static int cg_wait_for(int fd)
-{
-       int ret = -1;
-       struct pollfd fds = {
-               .fd = fd,
-               .events = POLLIN,
-       };
-
-       while (true) {
-               ret = poll(&fds, 1, 10000);
-
-               if (ret == -1) {
-                       if (errno == EINTR)
-                               continue;
-                       debug("Error: poll() failed\n");
-                       break;
-               }
-
-               if (ret > 0 && fds.revents & POLLIN) {
-                       ret = 0;
-                       break;
-               }
-       }
-
-       return ret;
-}
-
 /*
  * Attach a task to the given cgroup and wait for a cgroup frozen event.
  * All transient events (e.g. populated) are ignored.