lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 14 Nov 2012 09:50:16 -0600
From:	Serge Hallyn <serge.hallyn@...onical.com>
To:	Tejun Heo <tj@...nel.org>
Cc:	Li Zefan <lizefan@...wei.com>, cgroups@...r.kernel.org,
	containers@...ts.linux-foundation.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/2] cgroup:
 s/CGRP_CLONE_CHILDREN/CGRP_CPUSET_CLONE_CHILDREN/

Quoting Tejun Heo (tj@...nel.org):
> From 6e405c1ae4018d813e8ed9e0bd463d6976aebfa8 Mon Sep 17 00:00:00 2001
> From: Tejun Heo <tj@...nel.org>
> Date: Tue, 13 Nov 2012 12:21:50 -0800
> 
> clone_children is only meaningful for cpuset and will stay that way.
> Rename the flag to reflect that and update documentation.  Also, drop
> clone_children() wrapper in cgroup.c.  The thin wrapper is used only a
> few times and one of them will go away soon.
> 
> Signed-off-by: Tejun Heo <tj@...nel.org>

Thanks.

(both)
Acked-by: Serge E. Hallyn <serge.hallyn@...ntu.com>

> Cc: Glauber Costa <glommer@...allels.com>
> ---
> These two patches are based on top of "cgroup: allow->post_create() to
> fail" patchset.
> 
>  http://thread.gmane.org/gmane.linux.kernel.cgroups/5047
>  git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git review-cgroup-online-may-fail
> 
> and availalbe in the following branch.
> 
>  git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git review-cgroup-remove-post_clone
> 
> Thanks.
> 
>  Documentation/cgroups/cgroups.txt |  8 +++-----
>  include/linux/cgroup.h            |  6 ++++--
>  kernel/cgroup.c                   | 28 ++++++++++++----------------
>  3 files changed, 19 insertions(+), 23 deletions(-)
> 
> diff --git a/Documentation/cgroups/cgroups.txt b/Documentation/cgroups/cgroups.txt
> index b06eea2..24cdf76 100644
> --- a/Documentation/cgroups/cgroups.txt
> +++ b/Documentation/cgroups/cgroups.txt
> @@ -299,11 +299,9 @@ a cgroup hierarchy's release_agent path is empty.
>  1.5 What does clone_children do ?
>  ---------------------------------
>  
> -If the clone_children flag is enabled (1) in a cgroup, then all
> -cgroups created beneath will call the post_clone callbacks for each
> -subsystem of the newly created cgroup. Usually when this callback is
> -implemented for a subsystem, it copies the values of the parent
> -subsystem, this is the case for the cpuset.
> +This flag only affects the cpuset controller. If the clone_children
> +flag is enabled (1) in a cgroup, a new cpuset cgroup will copy its
> +configuration from the parent during initialization.
>  
>  1.6 How do I use cgroups ?
>  --------------------------
> diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
> index 89c631d..926d8d1 100644
> --- a/include/linux/cgroup.h
> +++ b/include/linux/cgroup.h
> @@ -143,9 +143,11 @@ enum {
>  	/* Control Group requires release notifications to userspace */
>  	CGRP_NOTIFY_ON_RELEASE,
>  	/*
> -	 * Clone cgroup values when creating a new child cgroup
> +	 * Clone the parent's configuration when creating a new child
> +	 * cpuset cgroup.  For historical reasons, this option can be
> +	 * specified at mount time and thus is implemented here.
>  	 */
> -	CGRP_CLONE_CHILDREN,
> +	CGRP_CPUSET_CLONE_CHILDREN,
>  };
>  
>  struct cgroup {
> diff --git a/kernel/cgroup.c b/kernel/cgroup.c
> index 46c5119..a49572e 100644
> --- a/kernel/cgroup.c
> +++ b/kernel/cgroup.c
> @@ -296,11 +296,6 @@ static int notify_on_release(const struct cgroup *cgrp)
>  	return test_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags);
>  }
>  
> -static int clone_children(const struct cgroup *cgrp)
> -{
> -	return test_bit(CGRP_CLONE_CHILDREN, &cgrp->flags);
> -}
> -
>  /*
>   * for_each_subsys() allows you to iterate on each subsystem attached to
>   * an active hierarchy
> @@ -1101,7 +1096,7 @@ static int cgroup_show_options(struct seq_file *seq, struct dentry *dentry)
>  		seq_puts(seq, ",xattr");
>  	if (strlen(root->release_agent_path))
>  		seq_printf(seq, ",release_agent=%s", root->release_agent_path);
> -	if (clone_children(&root->top_cgroup))
> +	if (test_bit(CGRP_CPUSET_CLONE_CHILDREN, &root->top_cgroup.flags))
>  		seq_puts(seq, ",clone_children");
>  	if (strlen(root->name))
>  		seq_printf(seq, ",name=%s", root->name);
> @@ -1113,7 +1108,7 @@ struct cgroup_sb_opts {
>  	unsigned long subsys_mask;
>  	unsigned long flags;
>  	char *release_agent;
> -	bool clone_children;
> +	bool cpuset_clone_children;
>  	char *name;
>  	/* User explicitly requested empty subsystem */
>  	bool none;
> @@ -1164,7 +1159,7 @@ static int parse_cgroupfs_options(char *data, struct cgroup_sb_opts *opts)
>  			continue;
>  		}
>  		if (!strcmp(token, "clone_children")) {
> -			opts->clone_children = true;
> +			opts->cpuset_clone_children = true;
>  			continue;
>  		}
>  		if (!strcmp(token, "xattr")) {
> @@ -1474,8 +1469,8 @@ static struct cgroupfs_root *cgroup_root_from_opts(struct cgroup_sb_opts *opts)
>  		strcpy(root->release_agent_path, opts->release_agent);
>  	if (opts->name)
>  		strcpy(root->name, opts->name);
> -	if (opts->clone_children)
> -		set_bit(CGRP_CLONE_CHILDREN, &root->top_cgroup.flags);
> +	if (opts->cpuset_clone_children)
> +		set_bit(CGRP_CPUSET_CLONE_CHILDREN, &root->top_cgroup.flags);
>  	return root;
>  }
>  
> @@ -3905,7 +3900,7 @@ fail:
>  static u64 cgroup_clone_children_read(struct cgroup *cgrp,
>  				    struct cftype *cft)
>  {
> -	return clone_children(cgrp);
> +	return test_bit(CGRP_CPUSET_CLONE_CHILDREN, &cgrp->flags);
>  }
>  
>  static int cgroup_clone_children_write(struct cgroup *cgrp,
> @@ -3913,9 +3908,9 @@ static int cgroup_clone_children_write(struct cgroup *cgrp,
>  				     u64 val)
>  {
>  	if (val)
> -		set_bit(CGRP_CLONE_CHILDREN, &cgrp->flags);
> +		set_bit(CGRP_CPUSET_CLONE_CHILDREN, &cgrp->flags);
>  	else
> -		clear_bit(CGRP_CLONE_CHILDREN, &cgrp->flags);
> +		clear_bit(CGRP_CPUSET_CLONE_CHILDREN, &cgrp->flags);
>  	return 0;
>  }
>  
> @@ -4130,8 +4125,8 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
>  	if (notify_on_release(parent))
>  		set_bit(CGRP_NOTIFY_ON_RELEASE, &cgrp->flags);
>  
> -	if (clone_children(parent))
> -		set_bit(CGRP_CLONE_CHILDREN, &cgrp->flags);
> +	if (test_bit(CGRP_CPUSET_CLONE_CHILDREN, &parent->flags))
> +		set_bit(CGRP_CPUSET_CLONE_CHILDREN, &cgrp->flags);
>  
>  	for_each_subsys(root, ss) {
>  		struct cgroup_subsys_state *css;
> @@ -4148,7 +4143,8 @@ static long cgroup_create(struct cgroup *parent, struct dentry *dentry,
>  				goto err_free_all;
>  		}
>  		/* At error, ->css_free() callback has to free assigned ID. */
> -		if (clone_children(parent) && ss->post_clone)
> +		if (test_bit(CGRP_CPUSET_CLONE_CHILDREN, &parent->flags) &&
> +		    ss->post_clone)
>  			ss->post_clone(cgrp);
>  
>  		if (ss->broken_hierarchy && !ss->warned_broken_hierarchy &&
> -- 
> 1.7.11.7
> 
> _______________________________________________
> Containers mailing list
> Containers@...ts.linux-foundation.org
> https://lists.linuxfoundation.org/mailman/listinfo/containers
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ