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 <[email protected]>
---
 src/lxc/cgroup.c  | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/lxc/cgroup.h  |   6 +++
 src/lxc/freezer.c |  91 ------------------------------------
 src/lxc/state.c   |  38 ----------------
 4 files changed, 140 insertions(+), 129 deletions(-)

diff --git a/src/lxc/cgroup.c b/src/lxc/cgroup.c
index be43c73..ff237fe 100644
--- a/src/lxc/cgroup.c
+++ b/src/lxc/cgroup.c
@@ -48,6 +48,7 @@
 #include "log.h"
 #include "cgroup.h"
 #include "start.h"
+#include "state.h"
 
 #if IS_BIONIC
 #include <../include/lxcmntent.h>
@@ -2022,3 +2023,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;
+}
+
diff --git a/src/lxc/cgroup.h b/src/lxc/cgroup.h
index 0c0a678..3aab12d 100644
--- a/src/lxc/cgroup.h
+++ b/src/lxc/cgroup.h
@@ -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
diff --git a/src/lxc/freezer.c b/src/lxc/freezer.c
index 7b9f45f..53e9f64 100644
--- a/src/lxc/freezer.c
+++ b/src/lxc/freezer.c
@@ -39,97 +39,6 @@
 
 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)
 {
diff --git a/src/lxc/state.c b/src/lxc/state.c
index a47341f..81648e0 100644
--- a/src/lxc/state.c
+++ b/src/lxc/state.c
@@ -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);
-- 
1.8.5.2

_______________________________________________
lxc-devel mailing list
[email protected]
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to