Re: [PATCH 03/12] memcg: convert away from cftype->read() and ->read_map()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed 27-11-13 18:42:30, Tejun Heo wrote:
> In preparation of conversion to kernfs, cgroup file handling is being
> consolidated so that it can be easily mapped to the seq_file based
> interface of kernfs.
> 
> cftype->read_map() doesn't add any value and being replaced with
> ->read_seq_string(), and all users of cftype->read() can be easily
> served, usually better, by seq_file and other methods.
> 
> Update mem_cgroup_read() to return u64 instead of printing itself and
> rename it to mem_cgroup_read_u64(), and update
> mem_cgroup_oom_control_read() to use ->read_seq_string() instead of
> ->read_map().
> 
> This patch doesn't make any visible behavior changes.
> 
> Signed-off-by: Tejun Heo <tj@xxxxxxxxxx>
> Cc: Johannes Weiner <hannes@xxxxxxxxxxx>
> Cc: Michal Hocko <mhocko@xxxxxxx>
> Cc: Balbir Singh <bsingharora@xxxxxxxxx>
> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@xxxxxxxxxxxxxx>

Acked-by: Michal Hocko <mhocko@xxxxxxx>

Thanks!

> ---
>  mm/memcontrol.c | 49 +++++++++++++++++++++----------------------------
>  1 file changed, 21 insertions(+), 28 deletions(-)
> 
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 7aa0d40..f149521 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -5150,14 +5150,12 @@ static inline u64 mem_cgroup_usage(struct mem_cgroup *memcg, bool swap)
>  	return val << PAGE_SHIFT;
>  }
>  
> -static ssize_t mem_cgroup_read(struct cgroup_subsys_state *css,
> -			       struct cftype *cft, struct file *file,
> -			       char __user *buf, size_t nbytes, loff_t *ppos)
> +static u64 mem_cgroup_read_u64(struct cgroup_subsys_state *css,
> +				   struct cftype *cft)
>  {
>  	struct mem_cgroup *memcg = mem_cgroup_from_css(css);
> -	char str[64];
>  	u64 val;
> -	int name, len;
> +	int name;
>  	enum res_type type;
>  
>  	type = MEMFILE_TYPE(cft->private);
> @@ -5183,8 +5181,7 @@ static ssize_t mem_cgroup_read(struct cgroup_subsys_state *css,
>  		BUG();
>  	}
>  
> -	len = scnprintf(str, sizeof(str), "%llu\n", (unsigned long long)val);
> -	return simple_read_from_buffer(buf, nbytes, ppos, str, len);
> +	return val;
>  }
>  
>  static int memcg_update_kmem_limit(struct cgroup_subsys_state *css, u64 val)
> @@ -5911,16 +5908,12 @@ static void mem_cgroup_oom_unregister_event(struct mem_cgroup *memcg,
>  }
>  
>  static int mem_cgroup_oom_control_read(struct cgroup_subsys_state *css,
> -	struct cftype *cft,  struct cgroup_map_cb *cb)
> +				       struct cftype *cft, struct seq_file *sf)
>  {
>  	struct mem_cgroup *memcg = mem_cgroup_from_css(css);
>  
> -	cb->fill(cb, "oom_kill_disable", memcg->oom_kill_disable);
> -
> -	if (atomic_read(&memcg->under_oom))
> -		cb->fill(cb, "under_oom", 1);
> -	else
> -		cb->fill(cb, "under_oom", 0);
> +	seq_printf(sf, "oom_kill_disable %d\n", memcg->oom_kill_disable);
> +	seq_printf(sf, "under_oom %d\n", (bool)atomic_read(&memcg->under_oom));
>  	return 0;
>  }
>  
> @@ -6239,31 +6232,31 @@ static struct cftype mem_cgroup_files[] = {
>  	{
>  		.name = "usage_in_bytes",
>  		.private = MEMFILE_PRIVATE(_MEM, RES_USAGE),
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "max_usage_in_bytes",
>  		.private = MEMFILE_PRIVATE(_MEM, RES_MAX_USAGE),
>  		.trigger = mem_cgroup_reset,
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "limit_in_bytes",
>  		.private = MEMFILE_PRIVATE(_MEM, RES_LIMIT),
>  		.write_string = mem_cgroup_write,
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "soft_limit_in_bytes",
>  		.private = MEMFILE_PRIVATE(_MEM, RES_SOFT_LIMIT),
>  		.write_string = mem_cgroup_write,
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "failcnt",
>  		.private = MEMFILE_PRIVATE(_MEM, RES_FAILCNT),
>  		.trigger = mem_cgroup_reset,
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "stat",
> @@ -6297,7 +6290,7 @@ static struct cftype mem_cgroup_files[] = {
>  	},
>  	{
>  		.name = "oom_control",
> -		.read_map = mem_cgroup_oom_control_read,
> +		.read_seq_string = mem_cgroup_oom_control_read,
>  		.write_u64 = mem_cgroup_oom_control_write,
>  		.private = MEMFILE_PRIVATE(_OOM_TYPE, OOM_CONTROL),
>  	},
> @@ -6315,24 +6308,24 @@ static struct cftype mem_cgroup_files[] = {
>  		.name = "kmem.limit_in_bytes",
>  		.private = MEMFILE_PRIVATE(_KMEM, RES_LIMIT),
>  		.write_string = mem_cgroup_write,
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "kmem.usage_in_bytes",
>  		.private = MEMFILE_PRIVATE(_KMEM, RES_USAGE),
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "kmem.failcnt",
>  		.private = MEMFILE_PRIVATE(_KMEM, RES_FAILCNT),
>  		.trigger = mem_cgroup_reset,
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "kmem.max_usage_in_bytes",
>  		.private = MEMFILE_PRIVATE(_KMEM, RES_MAX_USAGE),
>  		.trigger = mem_cgroup_reset,
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  #ifdef CONFIG_SLABINFO
>  	{
> @@ -6349,25 +6342,25 @@ static struct cftype memsw_cgroup_files[] = {
>  	{
>  		.name = "memsw.usage_in_bytes",
>  		.private = MEMFILE_PRIVATE(_MEMSWAP, RES_USAGE),
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "memsw.max_usage_in_bytes",
>  		.private = MEMFILE_PRIVATE(_MEMSWAP, RES_MAX_USAGE),
>  		.trigger = mem_cgroup_reset,
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "memsw.limit_in_bytes",
>  		.private = MEMFILE_PRIVATE(_MEMSWAP, RES_LIMIT),
>  		.write_string = mem_cgroup_write,
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{
>  		.name = "memsw.failcnt",
>  		.private = MEMFILE_PRIVATE(_MEMSWAP, RES_FAILCNT),
>  		.trigger = mem_cgroup_reset,
> -		.read = mem_cgroup_read,
> +		.read_u64 = mem_cgroup_read_u64,
>  	},
>  	{ },	/* terminate */
>  };
> -- 
> 1.8.4.2
> 

-- 
Michal Hocko
SUSE Labs
_______________________________________________
Containers mailing list
Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx
https://lists.linuxfoundation.org/mailman/listinfo/containers




[Index of Archives]     [Cgroups]     [Netdev]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux