[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