1 #include <linux/atomic.h>
4 #ifdef CONFIG_ZCACHE_DEBUG
5 #include <linux/debugfs.h>
7 #define ATTR(x) { .name = #x, .val = &zcache_##x, }
8 static struct debug_entry {
12 ATTR(obj_count), ATTR(obj_count_max),
13 ATTR(objnode_count), ATTR(objnode_count_max),
14 ATTR(flush_total), ATTR(flush_found),
15 ATTR(flobj_total), ATTR(flobj_found),
16 ATTR(failed_eph_puts), ATTR(failed_pers_puts),
17 ATTR(failed_getfreepages), ATTR(failed_alloc),
19 ATTR(compress_poor), ATTR(mean_compress_poor),
20 ATTR(eph_ate_tail), ATTR(eph_ate_tail_failed),
21 ATTR(pers_ate_eph), ATTR(pers_ate_eph_failed),
22 ATTR(evicted_eph_zpages), ATTR(evicted_eph_pageframes),
23 ATTR(eph_pageframes), ATTR(eph_pageframes_max),
24 ATTR(eph_zpages), ATTR(eph_zpages_max),
25 ATTR(pers_zpages), ATTR(pers_zpages_max),
26 ATTR(last_active_file_pageframes),
27 ATTR(last_inactive_file_pageframes),
28 ATTR(last_active_anon_pageframes),
29 ATTR(last_inactive_anon_pageframes),
30 ATTR(eph_nonactive_puts_ignored),
31 ATTR(pers_nonactive_puts_ignored),
32 #ifdef CONFIG_ZCACHE_WRITEBACK
33 ATTR(zcache_outstanding_writeback_pages),
34 ATTR(zcache_writtenback_pages),
38 int zcache_debugfs_init(void)
41 struct dentry *root = debugfs_create_dir("zcache", NULL);
45 for (i = 0; i < ARRAY_SIZE(attrs); i++)
46 if (!debugfs_create_size_t(attrs[i].name, S_IRUGO, root, attrs[i].val))
49 debugfs_create_u64("eph_zbytes", S_IRUGO, root, &zcache_eph_zbytes);
50 debugfs_create_u64("eph_zbytes_max", S_IRUGO, root, &zcache_eph_zbytes_max);
51 debugfs_create_u64("pers_zbytes", S_IRUGO, root, &zcache_pers_zbytes);
52 debugfs_create_u64("pers_zbytes_max", S_IRUGO, root, &zcache_pers_zbytes_max);
59 /* developers can call this in case of ooms, e.g. to find memory leaks */
60 void zcache_dump(void)
63 for (i = 0; i < ARRAY_SIZE(attrs); i++)
64 pr_debug("zcache: %s=%zu\n", attrs[i].name, *attrs[i].val);
66 pr_debug("zcache: eph_zbytes=%llu\n", (unsigned long long)zcache_eph_zbytes);
67 pr_debug("zcache: eph_zbytes_max=%llu\n", (unsigned long long)zcache_eph_zbytes_max);
68 pr_debug("zcache: pers_zbytes=%llu\n", (unsigned long long)zcache_pers_zbytes);
69 pr_debug("zcache: pers_zbytes_max=%llu\n", (unsigned long long)zcache_pers_zbytes_max);