Hi, Any comments on the new patch?
On Mon, Oct 28, 2013 at 06:21:04PM +0400, Stanislav Fomichev wrote: > > You are changing API. That is a strict no-no. > Oops, sorry about that. Added new API call to pass the option. > > --- > Kernel may be configured with different options (like swap) and may or > may not have some group variables. This commit adds possibility to use > common cgconfig.conf between these machines with different compiled options. > Add new option (-T, --tolerate) which lets cgconfigparser skip failed > group variables. > > Signed-off-by: Stanislav Fomichev <stfomic...@yandex-team.ru> > --- > include/libcgroup/init.h | 8 ++++++++ > src/api.c | 2 +- > src/config.c | 16 ++++++++++++++++ > src/libcgroup.map | 4 ++++ > src/tools/cgconfig.c | 9 ++++++++- > 5 files changed, 37 insertions(+), 2 deletions(-) > > diff --git a/include/libcgroup/init.h b/include/libcgroup/init.h > index 5150f2fc38eb..8b5471d606cd 100644 > --- a/include/libcgroup/init.h > +++ b/include/libcgroup/init.h > @@ -55,6 +55,14 @@ int cgroup_init(void); > int cgroup_get_subsys_mount_point(const char *controller, char > **mount_point); > > /** > + * This routine lets user specify whether he wants to tolerate some non-fatal > + * errors while processing config. > + * @param tolerate Parameter which indicates whether to tolerate (1) errors > + * or not (0). > + */ > +int cgroup_tolerate_errors(int tolerate); > + > +/** > * @} > * @} > */ > diff --git a/src/api.c b/src/api.c > index cd4e5b096b41..a252d0f99d67 100644 > --- a/src/api.c > +++ b/src/api.c > @@ -1660,7 +1660,7 @@ int cgroup_create_cgroup(struct cgroup *cgroup, int > ignore_ownership) > * ignore it specifically if they wish. > */ > if (error) { > - cgroup_warn("Warning: failed to set %s: %s > (%d)\n", > + cgroup_err("Error: failed to set %s: %s (%d)\n", > path, cgroup_strerror(error), error); > retval = ECGCANTSETVALUE; > continue; > diff --git a/src/config.c b/src/config.c > index ac844a7ae30c..06e9ac0d9c2d 100644 > --- a/src/config.c > +++ b/src/config.c > @@ -55,6 +55,7 @@ extern int yyparse(void); > > static struct cgroup default_group; > static int default_group_set = 0; > +static int cgroup_tolerate; > > /* > * The basic global data structures. > @@ -733,6 +734,14 @@ static int cgroup_config_create_groups(void) > error = cgroup_create_cgroup(cgroup, 0); > cgroup_dbg("creating group %s, error %d\n", cgroup->name, > error); > + > + /* if for some reason we couldn't set group value, just > + * skip it with a warning */ > + if (cgroup_tolerate && error == ECGCANTSETVALUE) { > + error = 0; > + continue; > + } > + > if (error) > return error; > } > @@ -1676,3 +1685,10 @@ int cgroup_config_create_template_group(struct cgroup > *cgroup, > end: > return ret; > } > + > +int cgroup_tolerate_errors(int tolerate) > +{ > + cgroup_tolerate = !!tolerate; > + > + return 0; > +} > diff --git a/src/libcgroup.map b/src/libcgroup.map > index b0c162c2581c..c7f1fb5b1588 100644 > --- a/src/libcgroup.map > +++ b/src/libcgroup.map > @@ -117,3 +117,7 @@ CGROUP_0.39 { > cgroup_log; > cgroup_parse_log_level_str; > } CGROUP_0.38; > + > +CGROUP_0.40 { > + cgroup_tolerate_errors; > +} CGROUP_0.39; > diff --git a/src/tools/cgconfig.c b/src/tools/cgconfig.c > index e8bb5a2e553b..9592043eda8c 100644 > --- a/src/tools/cgconfig.c > +++ b/src/tools/cgconfig.c > @@ -61,6 +61,7 @@ static void usage(int status, char *progname) > "permissions\n"); > printf(" -t <tuid>:<tgid> Default owner of the tasks "\ > "file\n"); > + printf(" -T, --tolerate Tolerate non-fatal errors\n"); > } > > int main(int argc, char *argv[]) > @@ -72,6 +73,7 @@ int main(int argc, char *argv[]) > {"load", 1, 0, 'l'}, > {"load-directory", 1, 0, 'L'}, > {"task", required_argument, NULL, 't'}, > + {"tolerate", 0, NULL, 'T' }, > {"admin", required_argument, NULL, 'a'}, > {"dperm", required_argument, NULL, 'd'}, > {"fperm", required_argument, NULL, 'f' }, > @@ -98,7 +100,7 @@ int main(int argc, char *argv[]) > if (error) > goto err; > > - while ((c = getopt_long(argc, argv, "hl:L:t:a:d:f:s:", options, > + while ((c = getopt_long(argc, argv, "hl:L:t:Ta:d:f:s:", options, > NULL)) > 0) { > switch (c) { > case 'h': > @@ -141,6 +143,11 @@ int main(int argc, char *argv[]) > if (error) > goto err; > break; > + case 'T': > + error = cgroup_tolerate_errors(1); > + if (error) > + goto err; > + break; > case 's': > filem_change = 1; > error = parse_mode(optarg, &tasks_mode, argv[0]); > -- > 1.8.3.2 > > > ------------------------------------------------------------------------------ > October Webinars: Code for Performance > Free Intel webinars can help you accelerate application performance. > Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from > the latest Intel processors and coprocessors. See abstracts and register > > http://pubads.g.doubleclick.net/gampad/clk?id=60135991&iu=/4140/ostg.clktrk > _______________________________________________ > Libcg-devel mailing list > Libcg-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/libcg-devel ------------------------------------------------------------------------------ Shape the Mobile Experience: Free Subscription Software experts and developers: Be at the forefront of tech innovation. Intel(R) Software Adrenaline delivers strategic insight and game-changing conversations that shape the rapidly evolving mobile landscape. Sign up now. http://pubads.g.doubleclick.net/gampad/clk?id=63431311&iu=/4140/ostg.clktrk _______________________________________________ Libcg-devel mailing list Libcg-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libcg-devel