[PATCH 11/12] memcg: rename cgroup_event to mem_cgroup_event

Michal Hocko mhocko at suse.cz
Fri Aug 30 11:19:50 UTC 2013


On Thu 15-08-13 12:02:29, Tejun Heo wrote:
> cgroup_event is only available in memcg now.  Let's brand it that way.
> While at it, add a comment encouraging deprecation of the feature and
> remove the respective section from cgroup documentation.
> 
> This patch is cosmetic.
> 
> v2: Index in cgroups.txt updated accordingly as suggested by Li Zefan.

OK, Documentation/cgroups/memory.txt contains a documentation for all
interfaces so this can go.
> 
> Signed-off-by: Tejun Heo <tj at kernel.org>
> Cc: Li Zefan <lizefan at huawei.com>

Acked-by: Michal Hocko <mhocko at suse.cz>

> ---
>  Documentation/cgroups/cgroups.txt | 20 --------------
>  mm/memcontrol.c                   | 57 +++++++++++++++++++++++++--------------
>  2 files changed, 37 insertions(+), 40 deletions(-)
> 
> diff --git a/Documentation/cgroups/cgroups.txt b/Documentation/cgroups/cgroups.txt
> index 638bf17..821de56 100644
> --- a/Documentation/cgroups/cgroups.txt
> +++ b/Documentation/cgroups/cgroups.txt
> @@ -24,7 +24,6 @@ CONTENTS:
>    2.1 Basic Usage
>    2.2 Attaching processes
>    2.3 Mounting hierarchies by name
> -  2.4 Notification API
>  3. Kernel API
>    3.1 Overview
>    3.2 Synchronization
> @@ -472,25 +471,6 @@ you give a subsystem a name.
>  The name of the subsystem appears as part of the hierarchy description
>  in /proc/mounts and /proc/<pid>/cgroups.
>  
> -2.4 Notification API
> ---------------------
> -
> -There is mechanism which allows to get notifications about changing
> -status of a cgroup.
> -
> -To register a new notification handler you need to:
> - - create a file descriptor for event notification using eventfd(2);
> - - open a control file to be monitored (e.g. memory.usage_in_bytes);
> - - write "<event_fd> <control_fd> <args>" to cgroup.event_control.
> -   Interpretation of args is defined by control file implementation;
> -
> -eventfd will be woken up by control file implementation or when the
> -cgroup is removed.
> -
> -To unregister a notification handler just close eventfd.
> -
> -NOTE: Support of notifications should be implemented for the control
> -file. See documentation for the subsystem.
>  
>  3. Kernel API
>  =============
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 8663d6c..2f0a8e1 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -243,7 +243,7 @@ struct mem_cgroup_eventfd_list {
>  /*
>   * cgroup_event represents events which userspace want to receive.
>   */
> -struct cgroup_event {
> +struct mem_cgroup_event {
>  	/*
>  	 * memcg which the event belongs to.
>  	 */
> @@ -5973,14 +5973,27 @@ static void kmem_cgroup_css_offline(struct mem_cgroup *memcg)
>  #endif
>  
>  /*
> + * DO NOT USE IN NEW FILES.
> + *
> + * "cgroup.event_control" implementation.
> + *
> + * This is way over-engineered.  It tries to support fully configureable
> + * events for each user.  Such level of flexibility is completely
> + * unnecessary especially in the light of the planned unified hierarchy.
> + *
> + * Please deprecate this and replace with something simpler if at all
> + * possible.
> + */
> +
> +/*
>   * Unregister event and free resources.
>   *
>   * Gets called from workqueue.
>   */
> -static void cgroup_event_remove(struct work_struct *work)
> +static void memcg_event_remove(struct work_struct *work)
>  {
> -	struct cgroup_event *event = container_of(work, struct cgroup_event,
> -			remove);
> +	struct mem_cgroup_event *event =
> +		container_of(work, struct mem_cgroup_event, remove);
>  	struct mem_cgroup *memcg = event->memcg;
>  
>  	remove_wait_queue(event->wqh, &event->wait);
> @@ -6000,11 +6013,11 @@ static void cgroup_event_remove(struct work_struct *work)
>   *
>   * Called with wqh->lock held and interrupts disabled.
>   */
> -static int cgroup_event_wake(wait_queue_t *wait, unsigned mode,
> -		int sync, void *key)
> +static int memcg_event_wake(wait_queue_t *wait, unsigned mode,
> +			    int sync, void *key)
>  {
> -	struct cgroup_event *event = container_of(wait,
> -			struct cgroup_event, wait);
> +	struct mem_cgroup_event *event =
> +		container_of(wait, struct mem_cgroup_event, wait);
>  	struct mem_cgroup *memcg = event->memcg;
>  	unsigned long flags = (unsigned long)key;
>  
> @@ -6033,27 +6046,29 @@ static int cgroup_event_wake(wait_queue_t *wait, unsigned mode,
>  	return 0;
>  }
>  
> -static void cgroup_event_ptable_queue_proc(struct file *file,
> +static void memcg_event_ptable_queue_proc(struct file *file,
>  		wait_queue_head_t *wqh, poll_table *pt)
>  {
> -	struct cgroup_event *event = container_of(pt,
> -			struct cgroup_event, pt);
> +	struct mem_cgroup_event *event =
> +		container_of(pt, struct mem_cgroup_event, pt);
>  
>  	event->wqh = wqh;
>  	add_wait_queue(wqh, &event->wait);
>  }
>  
>  /*
> + * DO NOT USE IN NEW FILES.
> + *
>   * Parse input and register new cgroup event handler.
>   *
>   * Input must be in format '<event_fd> <control_fd> <args>'.
>   * Interpretation of args is defined by control file implementation.
>   */
> -static int cgroup_write_event_control(struct cgroup_subsys_state *css,
> -				      struct cftype *cft, const char *buffer)
> +static int memcg_write_event_control(struct cgroup_subsys_state *css,
> +				     struct cftype *cft, const char *buffer)
>  {
>  	struct mem_cgroup *memcg = mem_cgroup_from_css(css);
> -	struct cgroup_event *event;
> +	struct mem_cgroup_event *event;
>  	struct cgroup_subsys_state *cfile_css;
>  	unsigned int efd, cfd;
>  	struct file *efile;
> @@ -6078,9 +6093,9 @@ static int cgroup_write_event_control(struct cgroup_subsys_state *css,
>  
>  	event->memcg = memcg;
>  	INIT_LIST_HEAD(&event->list);
> -	init_poll_funcptr(&event->pt, cgroup_event_ptable_queue_proc);
> -	init_waitqueue_func_entry(&event->wait, cgroup_event_wake);
> -	INIT_WORK(&event->remove, cgroup_event_remove);
> +	init_poll_funcptr(&event->pt, memcg_event_ptable_queue_proc);
> +	init_waitqueue_func_entry(&event->wait, memcg_event_wake);
> +	INIT_WORK(&event->remove, memcg_event_remove);
>  
>  	efile = eventfd_fget(efd);
>  	if (IS_ERR(efile)) {
> @@ -6111,6 +6126,8 @@ static int cgroup_write_event_control(struct cgroup_subsys_state *css,
>  	 * to be done via struct cftype but cgroup core no longer knows
>  	 * about these events.  The following is crude but the whole thing
>  	 * is for compatibility anyway.
> +	 *
> +	 * DO NOT ADD NEW FILES.
>  	 */
>  	name = cfile->f_dentry->d_name.name;
>  
> @@ -6221,8 +6238,8 @@ static struct cftype mem_cgroup_files[] = {
>  		.read_u64 = mem_cgroup_hierarchy_read,
>  	},
>  	{
> -		.name = "cgroup.event_control",
> -		.write_string = cgroup_write_event_control,
> +		.name = "cgroup.event_control",		/* XXX: for compat */
> +		.write_string = memcg_write_event_control,
>  		.flags = CFTYPE_NO_PREFIX,
>  		.mode = S_IWUGO,
>  	},
> @@ -6555,7 +6572,7 @@ static void mem_cgroup_invalidate_reclaim_iterators(struct mem_cgroup *memcg)
>  static void mem_cgroup_css_offline(struct cgroup_subsys_state *css)
>  {
>  	struct mem_cgroup *memcg = mem_cgroup_from_css(css);
> -	struct cgroup_event *event, *tmp;
> +	struct mem_cgroup_event *event, *tmp;
>  
>  	/*
>  	 * Unregister events and notify userspace.
> -- 
> 1.8.3.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe cgroups" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

-- 
Michal Hocko
SUSE Labs


More information about the Containers mailing list