]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
cgroup: move all some functions into cgroup.h
authorSerge Hallyn <serge.hallyn@ubuntu.com>
Mon, 13 Jan 2014 21:26:49 +0000 (15:26 -0600)
committerStéphane Graber <stgraber@ubuntu.com>
Mon, 13 Jan 2014 21:35:53 +0000 (16:35 -0500)
Some functions which wanted to know about cgroup paths were located
in other files.  Move them into cgroup.c, so that all knowledge of
the cgroup backend can be colocated.

Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
Acked-by: Stéphane Graber <stgraber@ubuntu.com>
src/lxc/cgroup.c
src/lxc/cgroup.h
src/lxc/freezer.c
src/lxc/state.c

index a192c3d59507aa5d96d59867fd49e6ac66bb3dd7..6d837f97ebc75db458b0ede8416daa25717c23e5 100644 (file)
@@ -48,6 +48,7 @@
 #include "log.h"
 #include "cgroup.h"
 #include "start.h"
+#include "state.h"
 
 #if IS_BIONIC
 #include <../include/lxcmntent.h>
@@ -2016,3 +2017,136 @@ int handle_cgroup_settings(struct cgroup_mount_point *mp, char *cgroup_path)
        }
        return 0;
 }
+
+extern void lxc_monitor_send_state(const char *name, lxc_state_t state,
+                           const char *lxcpath);
+int do_unfreeze(const char *nsgroup, int freeze, const char *name, const char *lxcpath)
+{
+       char freezer[MAXPATHLEN], *f;
+       char tmpf[32];
+       int fd, ret;
+
+       ret = snprintf(freezer, MAXPATHLEN, "%s/freezer.state", nsgroup);
+       if (ret >= MAXPATHLEN) {
+               ERROR("freezer.state name too long");
+               return -1;
+       }
+
+       fd = open(freezer, O_RDWR);
+       if (fd < 0) {
+               SYSERROR("failed to open freezer at '%s'", nsgroup);
+               return -1;
+       }
+
+       if (freeze) {
+               f = "FROZEN";
+               ret = write(fd, f, strlen(f) + 1);
+       } else {
+               f = "THAWED";
+               ret = write(fd, f, strlen(f) + 1);
+
+               /* compatibility code with old freezer interface */
+               if (ret < 0) {
+                       f = "RUNNING";
+                       ret = write(fd, f, strlen(f) + 1) < 0;
+               }
+       }
+
+       if (ret < 0) {
+               SYSERROR("failed to write '%s' to '%s'", f, freezer);
+               goto out;
+       }
+
+       while (1) {
+               ret = lseek(fd, 0L, SEEK_SET);
+               if (ret < 0) {
+                       SYSERROR("failed to lseek on file '%s'", freezer);
+                       goto out;
+               }
+
+               ret = read(fd, tmpf, sizeof(tmpf));
+               if (ret < 0) {
+                       SYSERROR("failed to read to '%s'", freezer);
+                       goto out;
+               }
+
+               ret = strncmp(f, tmpf, strlen(f));
+               if (!ret)
+               {
+                       if (name)
+                               lxc_monitor_send_state(name, freeze ? FROZEN : THAWED, lxcpath);
+                       break;          /* Success */
+               }
+
+               sleep(1);
+
+               ret = lseek(fd, 0L, SEEK_SET);
+               if (ret < 0) {
+                       SYSERROR("failed to lseek on file '%s'", freezer);
+                       goto out;
+               }
+
+               ret = write(fd, f, strlen(f) + 1);
+               if (ret < 0) {
+                       SYSERROR("failed to write '%s' to '%s'", f, freezer);
+                       goto out;
+               }
+       }
+
+out:
+       close(fd);
+       return ret;
+}
+
+int freeze_unfreeze(const char *name, int freeze, const char *lxcpath)
+{
+       char *cgabspath;
+       int ret;
+
+       cgabspath = lxc_cgroup_get_hierarchy_abs_path("freezer", name, lxcpath);
+       if (!cgabspath)
+               return -1;
+
+       ret = do_unfreeze(cgabspath, freeze, name, lxcpath);
+       free(cgabspath);
+       return ret;
+}
+
+lxc_state_t freezer_state(const char *name, const char *lxcpath)
+{
+       char *cgabspath = NULL;
+       char freezer[MAXPATHLEN];
+       char status[MAXPATHLEN];
+       FILE *file;
+       int ret;
+
+       cgabspath = lxc_cgroup_get_hierarchy_abs_path("freezer", name, lxcpath);
+       if (!cgabspath)
+               return -1;
+
+       ret = snprintf(freezer, MAXPATHLEN, "%s/freezer.state", cgabspath);
+       if (ret < 0 || ret >= MAXPATHLEN)
+               goto out;
+
+       file = fopen(freezer, "r");
+       if (!file) {
+               ret = -1;
+               goto out;
+       }
+
+       ret = fscanf(file, "%s", status);
+       fclose(file);
+
+       if (ret == EOF) {
+               SYSERROR("failed to read %s", freezer);
+               ret = -1;
+               goto out;
+       }
+
+       ret = lxc_str2state(status);
+
+out:
+       free(cgabspath);
+       return ret;
+}
+
index 0c0a678991b68d82e7d133dab57ff852b096178e..3aab12d43e11641dfd661d14a57a54c3b2fcd9fb 100644 (file)
@@ -26,6 +26,8 @@
 #include <stdint.h>
 #include <stddef.h>
 
+#include "state.h"
+
 struct cgroup_hierarchy;
 struct cgroup_meta_data;
 struct cgroup_mount_point;
@@ -164,4 +166,8 @@ extern int lxc_setup_mount_cgroup(const char *root, struct cgroup_process_info *
 
 extern int lxc_cgroup_nrtasks_handler(struct lxc_handler *handler);
 
+extern int do_unfreeze(const char *nsgroup, int freeze, const char *name, const char *lxcpath);
+extern int freeze_unfreeze(const char *name, int freeze, const char *lxcpath);
+extern const char *lxc_state2str(lxc_state_t state);
+extern lxc_state_t freezer_state(const char *name, const char *lxcpath);
 #endif
index 7b9f45f21e7cd3494726315bd7a004f60dd14ff6..53e9f644e924f371d8ff779cf46e0abbfa1140d7 100644 (file)
 
 lxc_log_define(lxc_freezer, lxc);
 
-static int do_unfreeze(const char *nsgroup, int freeze, const char *name, const char *lxcpath)
-{
-       char freezer[MAXPATHLEN], *f;
-       char tmpf[32];
-       int fd, ret;
-
-       ret = snprintf(freezer, MAXPATHLEN, "%s/freezer.state", nsgroup);
-       if (ret >= MAXPATHLEN) {
-               ERROR("freezer.state name too long");
-               return -1;
-       }
-
-       fd = open(freezer, O_RDWR);
-       if (fd < 0) {
-               SYSERROR("failed to open freezer at '%s'", nsgroup);
-               return -1;
-       }
-
-       if (freeze) {
-               f = "FROZEN";
-               ret = write(fd, f, strlen(f) + 1);
-       } else {
-               f = "THAWED";
-               ret = write(fd, f, strlen(f) + 1);
-
-               /* compatibility code with old freezer interface */
-               if (ret < 0) {
-                       f = "RUNNING";
-                       ret = write(fd, f, strlen(f) + 1) < 0;
-               }
-       }
-
-       if (ret < 0) {
-               SYSERROR("failed to write '%s' to '%s'", f, freezer);
-               goto out;
-       }
-
-       while (1) {
-               ret = lseek(fd, 0L, SEEK_SET);
-               if (ret < 0) {
-                       SYSERROR("failed to lseek on file '%s'", freezer);
-                       goto out;
-               }
-
-               ret = read(fd, tmpf, sizeof(tmpf));
-               if (ret < 0) {
-                       SYSERROR("failed to read to '%s'", freezer);
-                       goto out;
-               }
-
-               ret = strncmp(f, tmpf, strlen(f));
-               if (!ret)
-               {
-                       if (name)
-                               lxc_monitor_send_state(name, freeze ? FROZEN : THAWED, lxcpath);
-                       break;          /* Success */
-               }
-
-               sleep(1);
-
-               ret = lseek(fd, 0L, SEEK_SET);
-               if (ret < 0) {
-                       SYSERROR("failed to lseek on file '%s'", freezer);
-                       goto out;
-               }
-
-               ret = write(fd, f, strlen(f) + 1);
-               if (ret < 0) {
-                       SYSERROR("failed to write '%s' to '%s'", f, freezer);
-                       goto out;
-               }
-       }
-
-out:
-       close(fd);
-       return ret;
-}
-
-static int freeze_unfreeze(const char *name, int freeze, const char *lxcpath)
-{
-       char *cgabspath;
-       int ret;
-
-       cgabspath = lxc_cgroup_get_hierarchy_abs_path("freezer", name, lxcpath);
-       if (!cgabspath)
-               return -1;
-
-       ret = do_unfreeze(cgabspath, freeze, name, lxcpath);
-       free(cgabspath);
-       return ret;
-}
 
 int lxc_freeze(const char *name, const char *lxcpath)
 {
index a47341ff08158e453bc5dbff9cc7aed60f3a440c..81648e034c46fa843c0098f035a8c0b6110ef92b 100644 (file)
@@ -67,44 +67,6 @@ lxc_state_t lxc_str2state(const char *state)
        return -1;
 }
 
-static lxc_state_t freezer_state(const char *name, const char *lxcpath)
-{
-       char *cgabspath = NULL;
-       char freezer[MAXPATHLEN];
-       char status[MAXPATHLEN];
-       FILE *file;
-       int ret;
-
-       cgabspath = lxc_cgroup_get_hierarchy_abs_path("freezer", name, lxcpath);
-       if (!cgabspath)
-               return -1;
-
-       ret = snprintf(freezer, MAXPATHLEN, "%s/freezer.state", cgabspath);
-       if (ret < 0 || ret >= MAXPATHLEN)
-               goto out;
-
-       file = fopen(freezer, "r");
-       if (!file) {
-               ret = -1;
-               goto out;
-       }
-
-       ret = fscanf(file, "%s", status);
-       fclose(file);
-
-       if (ret == EOF) {
-               SYSERROR("failed to read %s", freezer);
-               ret = -1;
-               goto out;
-       }
-
-       ret = lxc_str2state(status);
-
-out:
-       free(cgabspath);
-       return ret;
-}
-
 lxc_state_t lxc_getstate(const char *name, const char *lxcpath)
 {
        lxc_state_t state = freezer_state(name, lxcpath);