diff options
Diffstat (limited to 'drivers/md/bcache/sysfs.c')
-rw-r--r-- | drivers/md/bcache/sysfs.c | 79 |
1 files changed, 45 insertions, 34 deletions
diff --git a/drivers/md/bcache/sysfs.c b/drivers/md/bcache/sysfs.c index a1f85612f0b3..d8458d477a12 100644 --- a/drivers/md/bcache/sysfs.c +++ b/drivers/md/bcache/sysfs.c | |||
@@ -102,7 +102,6 @@ rw_attribute(bypass_torture_test); | |||
102 | rw_attribute(key_merging_disabled); | 102 | rw_attribute(key_merging_disabled); |
103 | rw_attribute(gc_always_rewrite); | 103 | rw_attribute(gc_always_rewrite); |
104 | rw_attribute(expensive_debug_checks); | 104 | rw_attribute(expensive_debug_checks); |
105 | rw_attribute(freelist_percent); | ||
106 | rw_attribute(cache_replacement_policy); | 105 | rw_attribute(cache_replacement_policy); |
107 | rw_attribute(btree_shrinker_disabled); | 106 | rw_attribute(btree_shrinker_disabled); |
108 | rw_attribute(copy_gc_enabled); | 107 | rw_attribute(copy_gc_enabled); |
@@ -401,6 +400,48 @@ static struct attribute *bch_flash_dev_files[] = { | |||
401 | }; | 400 | }; |
402 | KTYPE(bch_flash_dev); | 401 | KTYPE(bch_flash_dev); |
403 | 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 | static 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 | |||
404 | SHOW(__bch_cache_set) | 445 | SHOW(__bch_cache_set) |
405 | { | 446 | { |
406 | unsigned root_usage(struct cache_set *c) | 447 | unsigned root_usage(struct cache_set *c) |
@@ -419,7 +460,7 @@ lock_root: | |||
419 | rw_lock(false, b, b->level); | 460 | rw_lock(false, b, b->level); |
420 | } while (b != c->root); | 461 | } while (b != c->root); |
421 | 462 | ||
422 | for_each_key_filter(b, k, &iter, bch_ptr_bad) | 463 | for_each_key_filter(&b->keys, k, &iter, bch_ptr_bad) |
423 | bytes += bkey_bytes(k); | 464 | bytes += bkey_bytes(k); |
424 | 465 | ||
425 | rw_unlock(false, b); | 466 | rw_unlock(false, b); |
@@ -434,7 +475,7 @@ lock_root: | |||
434 | 475 | ||
435 | mutex_lock(&c->bucket_lock); | 476 | mutex_lock(&c->bucket_lock); |
436 | list_for_each_entry(b, &c->btree_cache, list) | 477 | list_for_each_entry(b, &c->btree_cache, list) |
437 | ret += 1 << (b->page_order + PAGE_SHIFT); | 478 | ret += 1 << (b->keys.page_order + PAGE_SHIFT); |
438 | 479 | ||
439 | mutex_unlock(&c->bucket_lock); | 480 | mutex_unlock(&c->bucket_lock); |
440 | return ret; | 481 | return ret; |
@@ -491,7 +532,7 @@ lock_root: | |||
491 | 532 | ||
492 | sysfs_print_time_stats(&c->btree_gc_time, btree_gc, sec, ms); | 533 | sysfs_print_time_stats(&c->btree_gc_time, btree_gc, sec, ms); |
493 | sysfs_print_time_stats(&c->btree_split_time, btree_split, sec, us); | 534 | sysfs_print_time_stats(&c->btree_split_time, btree_split, sec, us); |
494 | sysfs_print_time_stats(&c->sort_time, btree_sort, ms, us); | 535 | sysfs_print_time_stats(&c->sort.time, btree_sort, ms, us); |
495 | sysfs_print_time_stats(&c->btree_read_time, btree_read, ms, us); | 536 | sysfs_print_time_stats(&c->btree_read_time, btree_read, ms, us); |
496 | sysfs_print_time_stats(&c->try_harder_time, try_harder, ms, us); | 537 | sysfs_print_time_stats(&c->try_harder_time, try_harder, ms, us); |
497 | 538 | ||
@@ -711,9 +752,6 @@ SHOW(__bch_cache) | |||
711 | sysfs_print(io_errors, | 752 | sysfs_print(io_errors, |
712 | atomic_read(&ca->io_errors) >> IO_ERROR_SHIFT); | 753 | atomic_read(&ca->io_errors) >> IO_ERROR_SHIFT); |
713 | 754 | ||
714 | sysfs_print(freelist_percent, ca->free.size * 100 / | ||
715 | ((size_t) ca->sb.nbuckets)); | ||
716 | |||
717 | if (attr == &sysfs_cache_replacement_policy) | 755 | if (attr == &sysfs_cache_replacement_policy) |
718 | return bch_snprint_string_list(buf, PAGE_SIZE, | 756 | return bch_snprint_string_list(buf, PAGE_SIZE, |
719 | cache_replacement_policies, | 757 | cache_replacement_policies, |
@@ -820,32 +858,6 @@ STORE(__bch_cache) | |||
820 | } | 858 | } |
821 | } | 859 | } |
822 | 860 | ||
823 | if (attr == &sysfs_freelist_percent) { | ||
824 | DECLARE_FIFO(long, free); | ||
825 | long i; | ||
826 | size_t p = strtoul_or_return(buf); | ||
827 | |||
828 | p = clamp_t(size_t, | ||
829 | ((size_t) ca->sb.nbuckets * p) / 100, | ||
830 | roundup_pow_of_two(ca->sb.nbuckets) >> 9, | ||
831 | ca->sb.nbuckets / 2); | ||
832 | |||
833 | if (!init_fifo_exact(&free, p, GFP_KERNEL)) | ||
834 | return -ENOMEM; | ||
835 | |||
836 | mutex_lock(&ca->set->bucket_lock); | ||
837 | |||
838 | fifo_move(&free, &ca->free); | ||
839 | fifo_swap(&free, &ca->free); | ||
840 | |||
841 | mutex_unlock(&ca->set->bucket_lock); | ||
842 | |||
843 | while (fifo_pop(&free, i)) | ||
844 | atomic_dec(&ca->buckets[i].pin); | ||
845 | |||
846 | free_fifo(&free); | ||
847 | } | ||
848 | |||
849 | if (attr == &sysfs_clear_stats) { | 861 | if (attr == &sysfs_clear_stats) { |
850 | atomic_long_set(&ca->sectors_written, 0); | 862 | atomic_long_set(&ca->sectors_written, 0); |
851 | atomic_long_set(&ca->btree_sectors_written, 0); | 863 | atomic_long_set(&ca->btree_sectors_written, 0); |
@@ -869,7 +881,6 @@ static struct attribute *bch_cache_files[] = { | |||
869 | &sysfs_metadata_written, | 881 | &sysfs_metadata_written, |
870 | &sysfs_io_errors, | 882 | &sysfs_io_errors, |
871 | &sysfs_clear_stats, | 883 | &sysfs_clear_stats, |
872 | &sysfs_freelist_percent, | ||
873 | &sysfs_cache_replacement_policy, | 884 | &sysfs_cache_replacement_policy, |
874 | NULL | 885 | NULL |
875 | }; | 886 | }; |