]> git.ipfire.org Git - thirdparty/libcgroup.git/commitdiff
fix cgroup_get_value_string problem with *.stat output
authorIvana Hutarova Varekova <varekova@redhat.com>
Mon, 8 Feb 2010 12:32:41 +0000 (13:32 +0100)
committerBalbir Singh <balbir@linux.vnet.ibm.com>
Wed, 10 Feb 2010 11:13:37 +0000 (16:43 +0530)
fix cgroup_get_value_string problem with *.stat output
the problem was in the low limit for value for the output of stat variables - now there are used the functions cgroup_read_stats_{begin/next/end} for this purpose

bogus output:
./src/tools/cgget -r memory.stat /
/:
memory.stat=cache 1024561152
rss 291270656
pgpgin 1209259
pgpgout 888011
inactive_anon 8192
active_anon 2976481

fixed output:
$ ./src/tools/cgget -r memory.stat /
/:
memory.stat=cache 1024610304
rss 291270656
pgpgin 1209271
pgpgout 888011
inactive_anon 8192
active_anon 297648128
inactive_file 619126784
active_file 399073280
unevictable 24576
hierarchical_memory_limit 9223372036854775807
hierarchical_memsw_limit 9223372036854775807
total_cache 1024610304
total_rss 291270656
total_pgpgin 1209271
total_pgpgout 888011
total_inactive_anon 8192
total_active_anon 297648128
total_inactive_file 619126784
total_active_file 399073280
total_unevictable 24576

Signed-off-by: Ivana Hutarova Varekova <varekova@redhat.com>
Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
include/libcgroup.h
src/tools/cgget.c

index ce75d2ee924390b05b95649e98a78bd0548571b5..c8f124076d951b1988e924d2aae78eb048266f92 100644 (file)
@@ -141,6 +141,7 @@ struct cgroup_file_info {
 
 #define CG_NV_MAX 100
 #define CG_CONTROLLER_MAX 100
+/* this is NOT ENOUGH for stat variables */
 #define CG_VALUE_MAX 100
 /* Max number of mounted hierarchies. Event if one controller is mounted per
  * hier, it can not exceed CG_CONTROLLER_MAX
index 4ca064e750eb456f4f67f10570477e9ae8d992ef..f4feb4f3035af6f7fdfc21a1ac7a0e1deae2af5d 100644 (file)
@@ -43,7 +43,28 @@ int display_one_record(char *name, struct cgroup_controller *group_controller,
        if (mode & MODE_SHOW_NAMES)
                printf("%s=", name);
 
-       printf("%s\n", value);
+       if (strcmp(strchr(name, '.')+1, "stat"))
+               printf("%s\n", value);
+
+       else {
+               void *handle;
+               struct cgroup_stat stat;
+
+               cgroup_read_stats_begin(group_controller->name,
+                       "/", &handle, &stat);
+               if (ret != 0) {
+                       fprintf(stderr, "stats read failed\n");
+                       return ret;
+               }
+               printf("%s %s", stat.name, stat.value);
+
+               while ((ret = cgroup_read_stats_next(&handle, &stat)) !=
+                               ECGEOF) {
+                       printf("\t%s %s", stat.name, stat.value);
+               }
+
+               cgroup_read_stats_end(&handle);
+       }
 
        free(value);
        return ret;