|
@@ -4887,14 +4887,15 @@ static int mem_cgroup_force_empty(struct mem_cgroup *memcg)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int mem_cgroup_force_empty_write(struct cgroup_subsys_state *css,
|
|
|
- unsigned int event)
|
|
|
+static ssize_t mem_cgroup_force_empty_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));
|
|
|
|
|
|
if (mem_cgroup_is_root(memcg))
|
|
|
return -EINVAL;
|
|
|
- return mem_cgroup_force_empty(memcg);
|
|
|
+ return mem_cgroup_force_empty(memcg) ?: nbytes;
|
|
|
}
|
|
|
|
|
|
static u64 mem_cgroup_hierarchy_read(struct cgroup_subsys_state *css,
|
|
@@ -5220,14 +5221,15 @@ out:
|
|
|
*memsw_limit = min_memsw_limit;
|
|
|
}
|
|
|
|
|
|
-static int mem_cgroup_reset(struct cgroup_subsys_state *css, unsigned int event)
|
|
|
+static ssize_t mem_cgroup_reset(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));
|
|
|
int name;
|
|
|
enum res_type type;
|
|
|
|
|
|
- type = MEMFILE_TYPE(event);
|
|
|
- name = MEMFILE_ATTR(event);
|
|
|
+ type = MEMFILE_TYPE(of_cft(of)->private);
|
|
|
+ name = MEMFILE_ATTR(of_cft(of)->private);
|
|
|
|
|
|
switch (name) {
|
|
|
case RES_MAX_USAGE:
|
|
@@ -5252,7 +5254,7 @@ static int mem_cgroup_reset(struct cgroup_subsys_state *css, unsigned int event)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- return 0;
|
|
|
+ return nbytes;
|
|
|
}
|
|
|
|
|
|
static u64 mem_cgroup_move_charge_read(struct cgroup_subsys_state *css,
|
|
@@ -6105,7 +6107,7 @@ static struct cftype mem_cgroup_files[] = {
|
|
|
{
|
|
|
.name = "max_usage_in_bytes",
|
|
|
.private = MEMFILE_PRIVATE(_MEM, RES_MAX_USAGE),
|
|
|
- .trigger = mem_cgroup_reset,
|
|
|
+ .write = mem_cgroup_reset,
|
|
|
.read_u64 = mem_cgroup_read_u64,
|
|
|
},
|
|
|
{
|
|
@@ -6123,7 +6125,7 @@ static struct cftype mem_cgroup_files[] = {
|
|
|
{
|
|
|
.name = "failcnt",
|
|
|
.private = MEMFILE_PRIVATE(_MEM, RES_FAILCNT),
|
|
|
- .trigger = mem_cgroup_reset,
|
|
|
+ .write = mem_cgroup_reset,
|
|
|
.read_u64 = mem_cgroup_read_u64,
|
|
|
},
|
|
|
{
|
|
@@ -6132,7 +6134,7 @@ static struct cftype mem_cgroup_files[] = {
|
|
|
},
|
|
|
{
|
|
|
.name = "force_empty",
|
|
|
- .trigger = mem_cgroup_force_empty_write,
|
|
|
+ .write = mem_cgroup_force_empty_write,
|
|
|
},
|
|
|
{
|
|
|
.name = "use_hierarchy",
|
|
@@ -6186,13 +6188,13 @@ static struct cftype mem_cgroup_files[] = {
|
|
|
{
|
|
|
.name = "kmem.failcnt",
|
|
|
.private = MEMFILE_PRIVATE(_KMEM, RES_FAILCNT),
|
|
|
- .trigger = mem_cgroup_reset,
|
|
|
+ .write = mem_cgroup_reset,
|
|
|
.read_u64 = mem_cgroup_read_u64,
|
|
|
},
|
|
|
{
|
|
|
.name = "kmem.max_usage_in_bytes",
|
|
|
.private = MEMFILE_PRIVATE(_KMEM, RES_MAX_USAGE),
|
|
|
- .trigger = mem_cgroup_reset,
|
|
|
+ .write = mem_cgroup_reset,
|
|
|
.read_u64 = mem_cgroup_read_u64,
|
|
|
},
|
|
|
#ifdef CONFIG_SLABINFO
|
|
@@ -6215,7 +6217,7 @@ static struct cftype memsw_cgroup_files[] = {
|
|
|
{
|
|
|
.name = "memsw.max_usage_in_bytes",
|
|
|
.private = MEMFILE_PRIVATE(_MEMSWAP, RES_MAX_USAGE),
|
|
|
- .trigger = mem_cgroup_reset,
|
|
|
+ .write = mem_cgroup_reset,
|
|
|
.read_u64 = mem_cgroup_read_u64,
|
|
|
},
|
|
|
{
|
|
@@ -6227,7 +6229,7 @@ static struct cftype memsw_cgroup_files[] = {
|
|
|
{
|
|
|
.name = "memsw.failcnt",
|
|
|
.private = MEMFILE_PRIVATE(_MEMSWAP, RES_FAILCNT),
|
|
|
- .trigger = mem_cgroup_reset,
|
|
|
+ .write = mem_cgroup_reset,
|
|
|
.read_u64 = mem_cgroup_read_u64,
|
|
|
},
|
|
|
{ }, /* terminate */
|