diff options
Diffstat (limited to 'net/ipv4/tcp_memcontrol.c')
| -rw-r--r-- | net/ipv4/tcp_memcontrol.c | 31 | 
1 files changed, 17 insertions, 14 deletions
diff --git a/net/ipv4/tcp_memcontrol.c b/net/ipv4/tcp_memcontrol.c index d4f015ad6c84..f7a2ec3ac584 100644 --- a/net/ipv4/tcp_memcontrol.c +++ b/net/ipv4/tcp_memcontrol.c @@ -102,17 +102,19 @@ static int tcp_update_limit(struct mem_cgroup *memcg, u64 val)  	return 0;  } -static int tcp_cgroup_write(struct cgroup_subsys_state *css, struct cftype *cft, -			    char *buffer) +static ssize_t tcp_cgroup_write(struct kernfs_open_file *of, +				char *buf, size_t nbytes, loff_t off)  { -	struct mem_cgroup *memcg = mem_cgroup_from_css(css); +	struct mem_cgroup *memcg = mem_cgroup_from_css(of_css(of));  	unsigned long long val;  	int ret = 0; -	switch (cft->private) { +	buf = strstrip(buf); + +	switch (of_cft(of)->private) {  	case RES_LIMIT:  		/* see memcontrol.c */ -		ret = res_counter_memparse_write_strategy(buffer, &val); +		ret = res_counter_memparse_write_strategy(buf, &val);  		if (ret)  			break;  		ret = tcp_update_limit(memcg, val); @@ -121,7 +123,7 @@ static int tcp_cgroup_write(struct cgroup_subsys_state *css, struct cftype *cft,  		ret = -EINVAL;  		break;  	} -	return ret; +	return ret ?: nbytes;  }  static u64 tcp_read_stat(struct mem_cgroup *memcg, int type, u64 default_val) @@ -168,17 +170,18 @@ static u64 tcp_cgroup_read(struct cgroup_subsys_state *css, struct cftype *cft)  	return val;  } -static int tcp_cgroup_reset(struct cgroup_subsys_state *css, unsigned int event) +static ssize_t tcp_cgroup_reset(struct kernfs_open_file *of, +				char *buf, size_t nbytes, loff_t off)  {  	struct mem_cgroup *memcg;  	struct cg_proto *cg_proto; -	memcg = mem_cgroup_from_css(css); +	memcg = mem_cgroup_from_css(of_css(of));  	cg_proto = tcp_prot.proto_cgroup(memcg);  	if (!cg_proto) -		return 0; +		return nbytes; -	switch (event) { +	switch (of_cft(of)->private) {  	case RES_MAX_USAGE:  		res_counter_reset_max(&cg_proto->memory_allocated);  		break; @@ -187,13 +190,13 @@ static int tcp_cgroup_reset(struct cgroup_subsys_state *css, unsigned int event)  		break;  	} -	return 0; +	return nbytes;  }  static struct cftype tcp_files[] = {  	{  		.name = "kmem.tcp.limit_in_bytes", -		.write_string = tcp_cgroup_write, +		.write = tcp_cgroup_write,  		.read_u64 = tcp_cgroup_read,  		.private = RES_LIMIT,  	}, @@ -205,13 +208,13 @@ static struct cftype tcp_files[] = {  	{  		.name = "kmem.tcp.failcnt",  		.private = RES_FAILCNT, -		.trigger = tcp_cgroup_reset, +		.write = tcp_cgroup_reset,  		.read_u64 = tcp_cgroup_read,  	},  	{  		.name = "kmem.tcp.max_usage_in_bytes",  		.private = RES_MAX_USAGE, -		.trigger = tcp_cgroup_reset, +		.write = tcp_cgroup_reset,  		.read_u64 = tcp_cgroup_read,  	},  	{ }	/* terminate */  |