cgroup cleanups/fixes
authorJens Axboe <jens.axboe@oracle.com>
Fri, 4 Dec 2009 18:26:22 +0000 (19:26 +0100)
committerJens Axboe <jens.axboe@oracle.com>
Fri, 4 Dec 2009 18:26:22 +0000 (19:26 +0100)
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
cgroup.c

index b0c7ea2003ac1a78937c45d562a57809fdd4e739..417c50be1088cc77bf531febfb29bbe1eeb8ddb2 100644 (file)
--- a/cgroup.c
+++ b/cgroup.c
@@ -82,15 +82,11 @@ static char *get_cgroup_root(struct thread_data *td)
        return str;
 }
 
        return str;
 }
 
-/*
- * Add pid to given class
- */
-static int cgroup_add_pid(struct thread_data *td)
+static int cgroup_write_pid(struct thread_data *td, const char *root)
 {
 {
-       char *root, tmp[256];
+       char tmp[256];
        FILE *f;
        FILE *f;
-
-       root = get_cgroup_root(td);
+       
        sprintf(tmp, "%s/tasks", root);
        f = fopen(tmp, "w");
        if (!f) {
        sprintf(tmp, "%s/tasks", root);
        f = fopen(tmp, "w");
        if (!f) {
@@ -100,30 +96,31 @@ static int cgroup_add_pid(struct thread_data *td)
 
        fprintf(f, "%d", td->pid);
        fclose(f);
 
        fprintf(f, "%d", td->pid);
        fclose(f);
-       free(root);
        return 0;
        return 0;
+
 }
 
 /*
 }
 
 /*
- * Move pid to root class
+ * Add pid to given class
  */
  */
-static int cgroup_del_pid(struct thread_data *td)
+static int cgroup_add_pid(struct thread_data *td)
 {
 {
-       char tmp[256];
-       FILE *f;
-
-       sprintf(tmp, "%s/tasks", td->o.cgroup_root);
-       f = fopen(tmp, "w");
-       if (!f) {
-               td_verror(td, errno, "cgroup open tasks");
-               return 1;
-       }
+       char *root;
+       int ret;
 
 
-       fprintf(f, "%d", td->pid);
-       fclose(f);
-       return 0;
+       root = get_cgroup_root(td);
+       ret = cgroup_write_pid(td, root);
+       free(root);
+       return ret;
 }
 
 }
 
+/*
+ * Move pid to root class
+ */
+static int cgroup_del_pid(struct thread_data *td)
+{
+       return cgroup_write_pid(td, td->o.cgroup_root);
+}
 
 int cgroup_setup(struct thread_data *td)
 {
 
 int cgroup_setup(struct thread_data *td)
 {
@@ -145,7 +142,7 @@ int cgroup_setup(struct thread_data *td)
 
                if (__e != EEXIST) {
                        td_verror(td, __e, "cgroup mkdir");
 
                if (__e != EEXIST) {
                        td_verror(td, __e, "cgroup mkdir");
-                       return 1;
+                       goto err;
                }
        } else
                add_cgroup(root);
                }
        } else
                add_cgroup(root);
@@ -155,7 +152,7 @@ int cgroup_setup(struct thread_data *td)
                f = fopen(tmp, "w");
                if (!f) {
                        td_verror(td, errno, "cgroup open weight");
                f = fopen(tmp, "w");
                if (!f) {
                        td_verror(td, errno, "cgroup open weight");
-                       return 1;
+                       goto err;
                }
 
                fprintf(f, "%d", td->o.cgroup_weight);
                }
 
                fprintf(f, "%d", td->o.cgroup_weight);
@@ -168,6 +165,9 @@ int cgroup_setup(struct thread_data *td)
                return 1;
 
        return 0;
                return 1;
 
        return 0;
+err:
+       free(root);
+       return 1;
 }
 
 void cgroup_shutdown(struct thread_data *td)
 }
 
 void cgroup_shutdown(struct thread_data *td)