On 04/06/2011 10:37 AM, Jan Safranek wrote:
> 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>
Acked-by: Ivana Hutarova Varekova<varek...@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


------------------------------------------------------------------------------
Benefiting from Server Virtualization: Beyond Initial Workload 
Consolidation -- Increasing the use of server virtualization is a top
priority.Virtualization can reduce costs, simplify management, and improve 
application availability and disaster protection. Learn more about boosting 
the value of server virtualization. http://p.sf.net/sfu/vmware-sfdev2dev
_______________________________________________
Libcg-devel mailing list
Libcg-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libcg-devel

Reply via email to