mm, memcg: extract memcg maxable seq_file logic to seq_show_memcg_tunable
memcg has a significant number of files exposed to kernfs where their value is either exposed directly or is "max" in the case of PAGE_COUNTER_MAX. This patch makes this generic by providing a single function to do this work. In combination with the previous patch adding mem_cgroup_from_seq, this makes all of the seq_show feeder functions significantly more simple. Link: http://lkml.kernel.org/r/20190124194100.GA31425@chrisdown.name Signed-off-by: Chris Down <chris@chrisdown.name> Acked-by: Johannes Weiner <hannes@cmpxchg.org> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Tejun Heo <tj@kernel.org> Cc: Roman Gushchin <guro@fb.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
aa9694bb78
commit
677dc9731b
|
@ -5353,6 +5353,16 @@ static void mem_cgroup_bind(struct cgroup_subsys_state *root_css)
|
|||
root_mem_cgroup->use_hierarchy = false;
|
||||
}
|
||||
|
||||
static int seq_puts_memcg_tunable(struct seq_file *m, unsigned long value)
|
||||
{
|
||||
if (value == PAGE_COUNTER_MAX)
|
||||
seq_puts(m, "max\n");
|
||||
else
|
||||
seq_printf(m, "%llu\n", (u64)value * PAGE_SIZE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static u64 memory_current_read(struct cgroup_subsys_state *css,
|
||||
struct cftype *cft)
|
||||
{
|
||||
|
@ -5363,15 +5373,8 @@ static u64 memory_current_read(struct cgroup_subsys_state *css,
|
|||
|
||||
static int memory_min_show(struct seq_file *m, void *v)
|
||||
{
|
||||
struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
|
||||
unsigned long min = READ_ONCE(memcg->memory.min);
|
||||
|
||||
if (min == PAGE_COUNTER_MAX)
|
||||
seq_puts(m, "max\n");
|
||||
else
|
||||
seq_printf(m, "%llu\n", (u64)min * PAGE_SIZE);
|
||||
|
||||
return 0;
|
||||
return seq_puts_memcg_tunable(m,
|
||||
READ_ONCE(mem_cgroup_from_seq(m)->memory.min));
|
||||
}
|
||||
|
||||
static ssize_t memory_min_write(struct kernfs_open_file *of,
|
||||
|
@ -5393,15 +5396,8 @@ static ssize_t memory_min_write(struct kernfs_open_file *of,
|
|||
|
||||
static int memory_low_show(struct seq_file *m, void *v)
|
||||
{
|
||||
struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
|
||||
unsigned long low = READ_ONCE(memcg->memory.low);
|
||||
|
||||
if (low == PAGE_COUNTER_MAX)
|
||||
seq_puts(m, "max\n");
|
||||
else
|
||||
seq_printf(m, "%llu\n", (u64)low * PAGE_SIZE);
|
||||
|
||||
return 0;
|
||||
return seq_puts_memcg_tunable(m,
|
||||
READ_ONCE(mem_cgroup_from_seq(m)->memory.low));
|
||||
}
|
||||
|
||||
static ssize_t memory_low_write(struct kernfs_open_file *of,
|
||||
|
@ -5423,15 +5419,7 @@ static ssize_t memory_low_write(struct kernfs_open_file *of,
|
|||
|
||||
static int memory_high_show(struct seq_file *m, void *v)
|
||||
{
|
||||
struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
|
||||
unsigned long high = READ_ONCE(memcg->high);
|
||||
|
||||
if (high == PAGE_COUNTER_MAX)
|
||||
seq_puts(m, "max\n");
|
||||
else
|
||||
seq_printf(m, "%llu\n", (u64)high * PAGE_SIZE);
|
||||
|
||||
return 0;
|
||||
return seq_puts_memcg_tunable(m, READ_ONCE(mem_cgroup_from_seq(m)->high));
|
||||
}
|
||||
|
||||
static ssize_t memory_high_write(struct kernfs_open_file *of,
|
||||
|
@ -5460,15 +5448,8 @@ static ssize_t memory_high_write(struct kernfs_open_file *of,
|
|||
|
||||
static int memory_max_show(struct seq_file *m, void *v)
|
||||
{
|
||||
struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
|
||||
unsigned long max = READ_ONCE(memcg->memory.max);
|
||||
|
||||
if (max == PAGE_COUNTER_MAX)
|
||||
seq_puts(m, "max\n");
|
||||
else
|
||||
seq_printf(m, "%llu\n", (u64)max * PAGE_SIZE);
|
||||
|
||||
return 0;
|
||||
return seq_puts_memcg_tunable(m,
|
||||
READ_ONCE(mem_cgroup_from_seq(m)->memory.max));
|
||||
}
|
||||
|
||||
static ssize_t memory_max_write(struct kernfs_open_file *of,
|
||||
|
@ -6600,15 +6581,8 @@ static u64 swap_current_read(struct cgroup_subsys_state *css,
|
|||
|
||||
static int swap_max_show(struct seq_file *m, void *v)
|
||||
{
|
||||
struct mem_cgroup *memcg = mem_cgroup_from_seq(m);
|
||||
unsigned long max = READ_ONCE(memcg->swap.max);
|
||||
|
||||
if (max == PAGE_COUNTER_MAX)
|
||||
seq_puts(m, "max\n");
|
||||
else
|
||||
seq_printf(m, "%llu\n", (u64)max * PAGE_SIZE);
|
||||
|
||||
return 0;
|
||||
return seq_puts_memcg_tunable(m,
|
||||
READ_ONCE(mem_cgroup_from_seq(m)->swap.max));
|
||||
}
|
||||
|
||||
static ssize_t swap_max_write(struct kernfs_open_file *of,
|
||||
|
|
Loading…
Reference in New Issue