diff options
author | Dan Magenheimer <dan.magenheimer@oracle.com> | 2011-09-21 12:28:04 -0400 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2012-01-23 16:07:50 -0500 |
commit | 417fc2caef268ed23169316f6c5e3a33775bfae5 (patch) | |
tree | 5bf70792f749645518bf8d13ac4853afd300a808 /mm | |
parent | 91c6cc9b5c216bd067f9af2cc64fcbe190755865 (diff) |
mm: cleancache: report statistics via debugfs instead of sysfs.
[v9: akpm@linux-foundation.org: sysfs->debugfs; no longer need Doc/ABI file]
Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com>
Signed-off-by: Konrad Wilk <konrad.wilk@oracle.com>
Cc: Jan Beulich <JBeulich@novell.com>
Acked-by: Seth Jennings <sjenning@linux.vnet.ibm.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Cc: Hugh Dickins <hughd@google.com>
Cc: Johannes Weiner <hannes@cmpxchg.org>
Cc: Nitin Gupta <ngupta@vflare.org>
Cc: Matthew Wilcox <matthew@wil.cx>
Cc: Chris Mason <chris.mason@oracle.com>
Cc: Rik Riel <riel@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/cleancache.c | 68 |
1 files changed, 22 insertions, 46 deletions
diff --git a/mm/cleancache.c b/mm/cleancache.c index b9c198bc6980..deb9f2c06fb7 100644 --- a/mm/cleancache.c +++ b/mm/cleancache.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
16 | #include <linux/exportfs.h> | 16 | #include <linux/exportfs.h> |
17 | #include <linux/mm.h> | 17 | #include <linux/mm.h> |
18 | #include <linux/debugfs.h> | ||
18 | #include <linux/cleancache.h> | 19 | #include <linux/cleancache.h> |
19 | 20 | ||
20 | /* | 21 | /* |
@@ -33,11 +34,15 @@ EXPORT_SYMBOL(cleancache_enabled); | |||
33 | */ | 34 | */ |
34 | static struct cleancache_ops cleancache_ops; | 35 | static struct cleancache_ops cleancache_ops; |
35 | 36 | ||
36 | /* useful stats available in /sys/kernel/mm/cleancache */ | 37 | /* |
37 | static unsigned long cleancache_succ_gets; | 38 | * Counters available via /sys/kernel/debug/frontswap (if debugfs is |
38 | static unsigned long cleancache_failed_gets; | 39 | * properly configured. These are for information only so are not protected |
39 | static unsigned long cleancache_puts; | 40 | * against increment races. |
40 | static unsigned long cleancache_flushes; | 41 | */ |
42 | static u64 cleancache_succ_gets; | ||
43 | static u64 cleancache_failed_gets; | ||
44 | static u64 cleancache_puts; | ||
45 | static u64 cleancache_invalidates; | ||
41 | 46 | ||
42 | /* | 47 | /* |
43 | * register operations for cleancache, returning previous thus allowing | 48 | * register operations for cleancache, returning previous thus allowing |
@@ -163,7 +168,7 @@ void __cleancache_invalidate_page(struct address_space *mapping, | |||
163 | if (cleancache_get_key(mapping->host, &key) >= 0) { | 168 | if (cleancache_get_key(mapping->host, &key) >= 0) { |
164 | (*cleancache_ops.invalidate_page)(pool_id, | 169 | (*cleancache_ops.invalidate_page)(pool_id, |
165 | key, page->index); | 170 | key, page->index); |
166 | cleancache_flushes++; | 171 | cleancache_invalidates++; |
167 | } | 172 | } |
168 | } | 173 | } |
169 | } | 174 | } |
@@ -199,48 +204,19 @@ void __cleancache_invalidate_fs(struct super_block *sb) | |||
199 | } | 204 | } |
200 | EXPORT_SYMBOL(__cleancache_invalidate_fs); | 205 | EXPORT_SYMBOL(__cleancache_invalidate_fs); |
201 | 206 | ||
202 | #ifdef CONFIG_SYSFS | ||
203 | |||
204 | /* see Documentation/ABI/xxx/sysfs-kernel-mm-cleancache */ | ||
205 | |||
206 | #define CLEANCACHE_SYSFS_RO(_name) \ | ||
207 | static ssize_t cleancache_##_name##_show(struct kobject *kobj, \ | ||
208 | struct kobj_attribute *attr, char *buf) \ | ||
209 | { \ | ||
210 | return sprintf(buf, "%lu\n", cleancache_##_name); \ | ||
211 | } \ | ||
212 | static struct kobj_attribute cleancache_##_name##_attr = { \ | ||
213 | .attr = { .name = __stringify(_name), .mode = 0444 }, \ | ||
214 | .show = cleancache_##_name##_show, \ | ||
215 | } | ||
216 | |||
217 | CLEANCACHE_SYSFS_RO(succ_gets); | ||
218 | CLEANCACHE_SYSFS_RO(failed_gets); | ||
219 | CLEANCACHE_SYSFS_RO(puts); | ||
220 | CLEANCACHE_SYSFS_RO(flushes); | ||
221 | |||
222 | static struct attribute *cleancache_attrs[] = { | ||
223 | &cleancache_succ_gets_attr.attr, | ||
224 | &cleancache_failed_gets_attr.attr, | ||
225 | &cleancache_puts_attr.attr, | ||
226 | &cleancache_flushes_attr.attr, | ||
227 | NULL, | ||
228 | }; | ||
229 | |||
230 | static struct attribute_group cleancache_attr_group = { | ||
231 | .attrs = cleancache_attrs, | ||
232 | .name = "cleancache", | ||
233 | }; | ||
234 | |||
235 | #endif /* CONFIG_SYSFS */ | ||
236 | |||
237 | static int __init init_cleancache(void) | 207 | static int __init init_cleancache(void) |
238 | { | 208 | { |
239 | #ifdef CONFIG_SYSFS | 209 | #ifdef CONFIG_DEBUG_FS |
240 | int err; | 210 | struct dentry *root = debugfs_create_dir("cleancache", NULL); |
241 | 211 | if (root == NULL) | |
242 | err = sysfs_create_group(mm_kobj, &cleancache_attr_group); | 212 | return -ENXIO; |
243 | #endif /* CONFIG_SYSFS */ | 213 | debugfs_create_u64("succ_gets", S_IRUGO, root, &cleancache_succ_gets); |
214 | debugfs_create_u64("failed_gets", S_IRUGO, | ||
215 | root, &cleancache_failed_gets); | ||
216 | debugfs_create_u64("puts", S_IRUGO, root, &cleancache_puts); | ||
217 | debugfs_create_u64("invalidates", S_IRUGO, | ||
218 | root, &cleancache_invalidates); | ||
219 | #endif | ||
244 | return 0; | 220 | return 0; |
245 | } | 221 | } |
246 | module_init(init_cleancache) | 222 | module_init(init_cleancache) |