cgsnapshot should show named hierarchies in 'mount' section. It already shows
their groups in 'group' sections and the output should be consistent.
And take care of quotes in the output, '=' is not valid character in controller
name unless it is in double quotes.

Example:
$ mount -t cgroup -o none,name=hello none /cgroup/named
$ mount -t cgroup -o cpuacct,name=cputest none /cgroup/cpuacct
$ cgsnapshot

mount {
        cpuacct = /cgroup/cpuacct;
        "name=hello" = /cgroup/named;
        "name=cputest" = /cgroup/cpuacct;
}

Signed-off-by: Jan Safranek <jsafr...@redhat.com>
---

 src/tools/cgsnapshot.c |   41 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 37 insertions(+), 4 deletions(-)

diff --git a/src/tools/cgsnapshot.c b/src/tools/cgsnapshot.c
index 4dbecfd..0ff7435 100644
--- a/src/tools/cgsnapshot.c
+++ b/src/tools/cgsnapshot.c
@@ -319,7 +319,10 @@ static int display_cgroup_data(struct cgroup *group,
                }
 
                /* print the controller header */
-               fprintf(of, "\t%s {\n", controller[i]);
+               if (strncmp(controller[i], "name=", 5) == 0)
+                       fprintf(of, "\t\"%s\" {\n", controller[i]);
+               else
+                       fprintf(of, "\t%s {\n", controller[i]);
                i++;
                nr_var = cgroup_get_value_name_count(group_controller);
 
@@ -573,13 +576,20 @@ static int show_mountpoints(const char *controller)
        char path[FILENAME_MAX];
        int ret;
        void *handle;
+       int quote = 0;
+
+       if (strncmp(controller, "name=", 5) == 0)
+               quote = 1;
 
        ret = cgroup_get_subsys_mount_point_begin(controller, &handle, path);
        if (ret)
                return ret;
 
        while (ret == 0) {
-               printf("\t%s = %s;\n", controller, path);
+               if (quote)
+                       printf("\t\"%s\" = %s;\n", controller, path);
+               else
+                       printf("\t%s = %s;\n", controller, path);
                ret = cgroup_get_subsys_mount_point_next(&handle, path);
        }
        cgroup_get_subsys_mount_point_end(&handle);
@@ -594,9 +604,10 @@ static int show_mountpoints(const char *controller)
 static int parse_mountpoints(cont_name_t cont_names[CG_CONTROLLER_MAX],
        const char *program_name)
 {
-       int ret;
+       int ret, final_ret;
        void *handle;
        struct controller_data info;
+       struct cgroup_mount_point mount;
 
        /* start mount section */
        fprintf(of, "mount {\n");
@@ -629,7 +640,29 @@ static int parse_mountpoints(cont_name_t 
cont_names[CG_CONTROLLER_MAX],
                }
        }
 
-       ret |= cgroup_get_all_controller_end(&handle);
+       final_ret = ret;
+       cgroup_get_all_controller_end(&handle);
+
+       /* process also named hierarchies */
+       ret = cgroup_get_controller_begin(&handle, &mount);
+       while (ret == 0) {
+               if (strncmp(mount.name, "name=", 5) == 0) {
+                       ret = show_mountpoints(mount.name);
+                       if (ret != 0)
+                               break;
+               }
+               ret = cgroup_get_controller_next(&handle, &mount);
+       }
+       if (ret != ECGEOF) {
+               if ((flags &  FL_SILENT) != 0) {
+                       fprintf(stderr,
+                               "E: in get next controller %s\n",
+                               cgroup_strerror(ret));
+                       return ret;
+               }
+               final_ret = ret;
+       }
+       cgroup_get_controller_end(&handle);
 
        /* finish mount section */
        fprintf(of, "}\n\n");


------------------------------------------------------------------------------
Xperia(TM) PLAY
It's a major breakthrough. An authentic gaming
smartphone on the nation's most reliable network.
And it wants your games.
http://p.sf.net/sfu/verizon-sfdev
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to