diff options
Diffstat (limited to 'drivers/md/bcache/sysfs.c')
-rw-r--r-- | drivers/md/bcache/sysfs.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c index 7e175dbc76b0..db2111b88e20 100644 --- a/drivers/md/bcache/sysfs.c +++ b/drivers/md/bcache/sysfs.c | |||
@@ -400,6 +400,48 @@ static struct attribute *bch_flash_dev_files[] = { | |||
400 | }; | 400 | }; |
401 | KTYPE(bch_flash_dev); | 401 | KTYPE(bch_flash_dev); |
402 | 402 | ||
403 | struct bset_stats_op { | ||
404 | struct btree_op op; | ||
405 | size_t nodes; | ||
406 | struct bset_stats stats; | ||
407 | }; | ||
408 | |||
409 | static int btree_bset_stats(struct btree_op *b_op, struct btree *b) | ||
410 | { | ||
411 | struct bset_stats_op *op = container_of(b_op, struct bset_stats_op, op); | ||
412 | |||
413 | op->nodes++; | ||
414 | bch_btree_keys_stats(&b->keys, &op->stats); | ||
415 | |||
416 | return MAP_CONTINUE; | ||
417 | } | ||
418 | |||
419 | int bch_bset_print_stats(struct cache_set *c, char *buf) | ||
420 | { | ||
421 | struct bset_stats_op op; | ||
422 | int ret; | ||
423 | |||
424 | memset(&op, 0, sizeof(op)); | ||
425 | bch_btree_op_init(&op.op, -1); | ||
426 | |||
427 | ret = bch_btree_map_nodes(&op.op, c, &ZERO_KEY, btree_bset_stats); | ||
428 | if (ret < 0) | ||
429 | return ret; | ||
430 | |||
431 | return snprintf(buf, PAGE_SIZE, | ||
432 | "btree nodes: %zu\n" | ||
433 | "written sets: %zu\n" | ||
434 | "unwritten sets: %zu\n" | ||
435 | "written key bytes: %zu\n" | ||
436 | "unwritten key bytes: %zu\n" | ||
437 | "floats: %zu\n" | ||
438 | "failed: %zu\n", | ||
439 | op.nodes, | ||
440 | op.stats.sets_written, op.stats.sets_unwritten, | ||
441 | op.stats.bytes_written, op.stats.bytes_unwritten, | ||
442 | op.stats.floats, op.stats.failed); | ||
443 | } | ||
444 | |||
403 | SHOW(__bch_cache_set) | 445 | SHOW(__bch_cache_set) |
404 | { | 446 | { |
405 | unsigned root_usage(struct cache_set *c) | 447 | unsigned root_usage(struct cache_set *c) |