|
@@ -29,6 +29,7 @@
|
|
|
#include <linux/swap.h>
|
|
|
#include <linux/spinlock.h>
|
|
|
#include <linux/fs.h>
|
|
|
+#include <linux/seq_file.h>
|
|
|
|
|
|
#include <asm/uaccess.h>
|
|
|
|
|
@@ -794,6 +795,49 @@ static ssize_t mem_force_empty_read(struct cgroup *cont,
|
|
|
}
|
|
|
|
|
|
|
|
|
+static const struct mem_cgroup_stat_desc {
|
|
|
+ const char *msg;
|
|
|
+ u64 unit;
|
|
|
+} mem_cgroup_stat_desc[] = {
|
|
|
+ [MEM_CGROUP_STAT_CACHE] = { "cache", PAGE_SIZE, },
|
|
|
+ [MEM_CGROUP_STAT_RSS] = { "rss", PAGE_SIZE, },
|
|
|
+};
|
|
|
+
|
|
|
+static int mem_control_stat_show(struct seq_file *m, void *arg)
|
|
|
+{
|
|
|
+ struct cgroup *cont = m->private;
|
|
|
+ struct mem_cgroup *mem_cont = mem_cgroup_from_cont(cont);
|
|
|
+ struct mem_cgroup_stat *stat = &mem_cont->stat;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; i < ARRAY_SIZE(stat->cpustat[0].count); i++) {
|
|
|
+ s64 val;
|
|
|
+
|
|
|
+ val = mem_cgroup_read_stat(stat, i);
|
|
|
+ val *= mem_cgroup_stat_desc[i].unit;
|
|
|
+ seq_printf(m, "%s %lld\n", mem_cgroup_stat_desc[i].msg,
|
|
|
+ (long long)val);
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static const struct file_operations mem_control_stat_file_operations = {
|
|
|
+ .read = seq_read,
|
|
|
+ .llseek = seq_lseek,
|
|
|
+ .release = single_release,
|
|
|
+};
|
|
|
+
|
|
|
+static int mem_control_stat_open(struct inode *unused, struct file *file)
|
|
|
+{
|
|
|
+ /* XXX __d_cont */
|
|
|
+ struct cgroup *cont = file->f_dentry->d_parent->d_fsdata;
|
|
|
+
|
|
|
+ file->f_op = &mem_control_stat_file_operations;
|
|
|
+ return single_open(file, mem_control_stat_show, cont);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
static struct cftype mem_cgroup_files[] = {
|
|
|
{
|
|
|
.name = "usage_in_bytes",
|
|
@@ -821,6 +865,10 @@ static struct cftype mem_cgroup_files[] = {
|
|
|
.write = mem_force_empty_write,
|
|
|
.read = mem_force_empty_read,
|
|
|
},
|
|
|
+ {
|
|
|
+ .name = "stat",
|
|
|
+ .open = mem_control_stat_open,
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
static struct mem_cgroup init_mem_cgroup;
|