the first version of this patch was created by Libo Chen <clbchenlibo.chen@...>
see
http://sourceforge.net/p/libcg/mailman/libcg-devel/thread/51FB6459.9000307%40huawei.com/#msg31243958
before patch:
#lscgroup
cpu:/
cpuset:/
#cgsnapshot -s cpu
mount {
cpuset = /cgroup/cpuacct;
cpu = /cgroup/cpu;
}
We just wanted to save cpu controller, so cpuset was unexpected
Signed-off-by: Ivana Hutarova Varekova <[email protected]>
---
src/tools/cgsnapshot.c | 61 +++++++++++++++++++++++++++++++++++-------------
1 files changed, 44 insertions(+), 17 deletions(-)
diff --git a/src/tools/cgsnapshot.c b/src/tools/cgsnapshot.c
index 046c70a..dd49c9c 100644
--- a/src/tools/cgsnapshot.c
+++ b/src/tools/cgsnapshot.c
@@ -624,8 +624,46 @@ static int show_mountpoints(const char *controller)
return 0;
}
+/* parse whether data about given controller "name" should be displayed.
+ * If yes then the data are printed. "cont_names" is list of controllers
+ * which should be shown.
+ */
+static void parse_mountpoint(cont_name_t cont_names[CG_CONTROLLER_MAX],
+ char *name)
+{
+ int i;
+
+ /* if there is no controller list show all mounted controllers */
+ if (!(flags & FL_LIST)) {
+ if (show_mountpoints(name)) {
+ /* the controller is not mounted */
+ if ((flags & FL_SILENT) == 0)
+ fprintf(stderr, "ERROR: %s hierarchy "\
+ "not mounted\n", name);
+ }
+ return;
+ }
+
+ /* there is controller list - show wanted mounted controllers only */
+ for (i = 0; i <= CG_CONTROLLER_MAX-1; i++) {
+ if (!strncmp(cont_names[i], name, strlen(name)+1)) {
+ /* controller is on the list */
+ if (show_mountpoints(name)) {
+ /* the controller is not mounted */
+ if ((flags & FL_SILENT) == 0) {
+ fprintf(stderr, "ERROR: %s hierarchy "\
+ "not mounted\n", name);
+ }
+ break;
+ }
+ break;
+ }
+ }
+
+ return;
+}
+
/* print data about input mount points */
-/* TODO only wanted ones */
static int parse_mountpoints(cont_name_t cont_names[CG_CONTROLLER_MAX],
const char *program_name)
{
@@ -642,16 +680,8 @@ static int parse_mountpoints(cont_name_t
cont_names[CG_CONTROLLER_MAX],
while (ret == 0) {
/* the controller attached to some hierarchy */
- if (info.hierarchy != 0) {
- ret = show_mountpoints(info.name);
- if (ret != 0) {
- /* the controller is not mounted */
- if ((flags & FL_SILENT) == 0) {
- fprintf(stderr, "ERROR: %s hierarchy "\
- "not mounted\n", info.name);
- }
- }
- }
+ if (info.hierarchy != 0)
+ parse_mountpoint(cont_names, info.name);
/* next controller */
ret = cgroup_get_all_controller_next(&handle, &info);
@@ -664,19 +694,16 @@ static int parse_mountpoints(cont_name_t
cont_names[CG_CONTROLLER_MAX],
}
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;
- }
+ if (strncmp(mount.name, "name=", 5) == 0)
+ parse_mountpoint(cont_names, mount.name);
ret = cgroup_get_controller_next(&handle, &mount);
}
+
if (ret != ECGEOF) {
if ((flags & FL_SILENT) != 0) {
fprintf(stderr,
------------------------------------------------------------------------------
Introducing Performance Central, a new site from SourceForge and
AppDynamics. Performance Central is your source for news, insights,
analysis and resources for efficient Application Performance Management.
Visit us today!
http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel