summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIvana Hutarova Varekova <varekova@redhat.com>2010-02-08 13:32:41 +0100
committerBalbir Singh <balbir@linux.vnet.ibm.com>2010-02-10 16:43:37 +0530
commit6a7cfad855f7dc0c0a030dc0cc812c5fa9fdeb53 (patch)
tree895fbe94050424400bebfd5acf15f7844da7fc57
parenta2167e206bf6062e1a2388d54ca14df0389b872f (diff)
downloadlibcg-6a7cfad855f7dc0c0a030dc0cc812c5fa9fdeb53.tar.gz
libcg-6a7cfad855f7dc0c0a030dc0cc812c5fa9fdeb53.tar.xz
libcg-6a7cfad855f7dc0c0a030dc0cc812c5fa9fdeb53.zip
fix cgroup_get_value_string problem with *.stat output
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>
-rw-r--r--include/libcgroup.h1
-rw-r--r--src/tools/cgget.c23
2 files changed, 23 insertions, 1 deletions
diff --git a/include/libcgroup.h b/include/libcgroup.h
index ce75d2e..c8f1240 100644
--- a/include/libcgroup.h
+++ b/include/libcgroup.h
@@ -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
diff --git a/src/tools/cgget.c b/src/tools/cgget.c
index 4ca064e..f4feb4f 100644
--- a/src/tools/cgget.c
+++ b/src/tools/cgget.c
@@ -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;