[lxc-devel] [PATCH] lxc_global_config_value can return the default lxc.cgroup.pattern whether root or non-root
Serge Hallyn
serge.hallyn at ubuntu.com
Thu Oct 2 16:35:32 UTC 2014
Quoting KATOH Yasufumi (karma at jazz.email.ne.jp):
> >>> On Tue, 30 Sep 2014 19:48:09 +0000
> in message "Re: [lxc-devel] [PATCH] lxc-config can show lxc.cgroup.(use|pattern)"
> Serge Hallyn-san wrote:
>
> > I think it would be worth also augmenting
> > lxc_global_config_value() to return a default lxc.cgroup.use
> > for 'all', and a default lxc.cgroup.pattern ("/lxc/%n" for root
> > or "%n" for non-root).
>
> lxc.cgroup.pattern is like this? (^_^;)
>
> Signed-off-by: KATOH Yasufumi <karma at jazz.email.ne.jp>
Yes, thanks! The patch looks good to me.
The lxc_global_config_value() fn itself i think is going to need
some reworking as it won't scale like this :) I may look at that
in awhile.
Acked-by: Serge E. Hallyn <serge.hallyn at ubuntu.com>
> ---
> src/lxc/cgfs.c | 10 +---------
> src/lxc/cgmanager.c | 11 ++---------
> src/lxc/utils.c | 15 ++++++++++++++-
> 3 files changed, 17 insertions(+), 19 deletions(-)
>
> diff --git a/src/lxc/cgfs.c b/src/lxc/cgfs.c
> index 0f181c6..362043e 100644
> --- a/src/lxc/cgfs.c
> +++ b/src/lxc/cgfs.c
> @@ -2226,15 +2226,7 @@ static void *cgfs_init(const char *name)
> if (!d->name)
> goto err1;
>
> - /* if we are running as root, use system cgroup pattern, otherwise
> - * just create a cgroup under the current one. But also fall back to
> - * that if for some reason reading the configuration fails and no
> - * default value is available
> - */
> - if (geteuid() == 0)
> - d->cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern");
> - if (!d->cgroup_pattern)
> - d->cgroup_pattern = "%n";
> + d->cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern");
>
> d->meta = lxc_cgroup_load_meta();
> if (!d->meta) {
> diff --git a/src/lxc/cgmanager.c b/src/lxc/cgmanager.c
> index 4038c41..11c48ab 100644
> --- a/src/lxc/cgmanager.c
> +++ b/src/lxc/cgmanager.c
> @@ -478,15 +478,8 @@ static void *cgm_init(const char *name)
> goto err1;
> }
>
> - /* if we are running as root, use system cgroup pattern, otherwise
> - * just create a cgroup under the current one. But also fall back to
> - * that if for some reason reading the configuration fails and no
> - * default value is available
> - */
> - if (geteuid() == 0)
> - d->cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern");
> - if (!d->cgroup_pattern)
> - d->cgroup_pattern = "%n";
> + d->cgroup_pattern = lxc_global_config_value("lxc.cgroup.pattern");
> +
> // cgm_create immediately gets called so keep the connection open
> return d;
>
> diff --git a/src/lxc/utils.c b/src/lxc/utils.c
> index ed34706..0bdb184 100644
> --- a/src/lxc/utils.c
> +++ b/src/lxc/utils.c
> @@ -265,7 +265,7 @@ const char *lxc_global_config_value(const char *option_name)
> { "lxc.bdev.zfs.root", DEFAULT_ZFSROOT },
> { "lxc.lxcpath", NULL },
> { "lxc.default_config", NULL },
> - { "lxc.cgroup.pattern", DEFAULT_CGROUP_PATTERN },
> + { "lxc.cgroup.pattern", NULL },
> { "lxc.cgroup.use", NULL },
> { NULL, NULL },
> };
> @@ -279,6 +279,7 @@ const char *lxc_global_config_value(const char *option_name)
> char *user_config_path = NULL;
> char *user_default_config_path = NULL;
> char *user_lxc_path = NULL;
> + char *user_cgroup_pattern = NULL;
>
> if (geteuid() > 0) {
> const char *user_home = getenv("HOME");
> @@ -292,11 +293,13 @@ const char *lxc_global_config_value(const char *option_name)
> sprintf(user_config_path, "%s/.config/lxc/lxc.conf", user_home);
> sprintf(user_default_config_path, "%s/.config/lxc/default.conf", user_home);
> sprintf(user_lxc_path, "%s/.local/share/lxc/", user_home);
> + user_cgroup_pattern = strdup("%n");
> }
> else {
> user_config_path = strdup(LXC_GLOBAL_CONF);
> user_default_config_path = strdup(LXC_DEFAULT_CONFIG);
> user_lxc_path = strdup(LXCPATH);
> + user_cgroup_pattern = strdup(DEFAULT_CGROUP_PATTERN);
> }
>
> const char * const (*ptr)[2];
> @@ -312,6 +315,7 @@ const char *lxc_global_config_value(const char *option_name)
> free(user_config_path);
> free(user_default_config_path);
> free(user_lxc_path);
> + free(user_cgroup_pattern);
> errno = EINVAL;
> return NULL;
> }
> @@ -320,6 +324,7 @@ const char *lxc_global_config_value(const char *option_name)
> free(user_config_path);
> free(user_default_config_path);
> free(user_lxc_path);
> + free(user_cgroup_pattern);
> return values[i];
> }
>
> @@ -378,14 +383,22 @@ const char *lxc_global_config_value(const char *option_name)
> remove_trailing_slashes(user_lxc_path);
> values[i] = user_lxc_path;
> free(user_default_config_path);
> + free(user_cgroup_pattern);
> }
> else if (strcmp(option_name, "lxc.default_config") == 0) {
> values[i] = user_default_config_path;
> free(user_lxc_path);
> + free(user_cgroup_pattern);
> + }
> + else if (strcmp(option_name, "lxc.cgroup.pattern") == 0) {
> + values[i] = user_cgroup_pattern;
> + free(user_default_config_path);
> + free(user_lxc_path);
> }
> else {
> free(user_default_config_path);
> free(user_lxc_path);
> + free(user_cgroup_pattern);
> values[i] = (*ptr)[1];
> }
> /* special case: if default value is NULL,
> --
> 2.0.4
>
> _______________________________________________
> lxc-devel mailing list
> lxc-devel at lists.linuxcontainers.org
> http://lists.linuxcontainers.org/listinfo/lxc-devel
More information about the lxc-devel
mailing list