- sysfs_hprint(written, sectors_written(ca) << 9);
- sysfs_hprint(btree_written,
- atomic64_read(&ca->btree_sectors_written) << 9);
- sysfs_hprint(metadata_written,
- (atomic64_read(&ca->meta_sectors_written) +
- atomic64_read(&ca->btree_sectors_written)) << 9);
-
- sysfs_hprint(dirty_data, stats.sectors[S_DIRTY] << 9);
- sysfs_print(dirty_bytes, stats.sectors[S_DIRTY] << 9);
- sysfs_print(dirty_buckets, stats.buckets_dirty);
- sysfs_hprint(cached_data, stats.sectors[S_CACHED] << 9);
- sysfs_print(cached_bytes, stats.sectors[S_CACHED] << 9);
- sysfs_print(cached_buckets, stats.buckets_cached);
- sysfs_print(meta_buckets, stats.buckets_meta);
- sysfs_print(alloc_buckets, stats.buckets_alloc);
- sysfs_print(available_buckets, dev_buckets_available(ca));
- sysfs_print(free_buckets, dev_buckets_free(ca));
- sysfs_print(has_data, ca->mi.has_data);
- sysfs_print(has_metadata, ca->mi.has_metadata);
-
- sysfs_pd_controller_show(copy_gc, &ca->moving_gc_pd);
-
- if (attr == &sysfs_cache_replacement_policy)
- return bch2_snprint_string_list(buf, PAGE_SIZE,
- bch2_cache_replacement_policies,
- ca->mi.replacement);
-
- sysfs_print(tier, ca->mi.tier);
-
- if (attr == &sysfs_state_rw)
- return bch2_snprint_string_list(buf, PAGE_SIZE,
- bch2_dev_state,
- ca->mi.state);
-
- if (attr == &sysfs_read_priority_stats)
- return show_quantiles(ca, buf, bucket_priority_fn, (void *) 0);
- if (attr == &sysfs_write_priority_stats)
- return show_quantiles(ca, buf, bucket_priority_fn, (void *) 1);
- if (attr == &sysfs_fragmentation_stats)
- return show_quantiles(ca, buf, bucket_sectors_used_fn, NULL);
- if (attr == &sysfs_oldest_gen_stats)
- return show_quantiles(ca, buf, bucket_oldest_gen_fn, NULL);
- if (attr == &sysfs_reserve_stats)
- return show_reserve_stats(ca, buf);
- if (attr == &sysfs_alloc_debug)
- return show_dev_alloc_debug(ca, buf);
+
+ if (attr == &sysfs_label) {
+ if (ca->mi.group) {
+ mutex_lock(&c->sb_lock);
+ bch2_disk_path_to_text(&out, &c->disk_sb,
+ ca->mi.group - 1);
+ mutex_unlock(&c->sb_lock);
+ }
+
+ pr_buf(&out, "\n");
+ return out.pos - buf;
+ }
+
+ if (attr == &sysfs_has_data) {
+ bch2_flags_to_text(&out, bch2_data_types,
+ bch2_dev_has_data(c, ca));
+ pr_buf(&out, "\n");
+ return out.pos - buf;
+ }
+
+ if (attr == &sysfs_cache_replacement_policy) {
+ bch2_string_opt_to_text(&out,
+ bch2_cache_replacement_policies,
+ ca->mi.replacement);
+ pr_buf(&out, "\n");
+ return out.pos - buf;
+ }
+
+ if (attr == &sysfs_state_rw) {
+ bch2_string_opt_to_text(&out, bch2_member_states,
+ ca->mi.state);
+ pr_buf(&out, "\n");
+ return out.pos - buf;
+ }
+
+ if (attr == &sysfs_iodone) {
+ dev_iodone_to_text(&out, ca);
+ return out.pos - buf;
+ }
+
+ sysfs_print(io_latency_read, atomic64_read(&ca->cur_latency[READ]));
+ sysfs_print(io_latency_write, atomic64_read(&ca->cur_latency[WRITE]));
+
+ if (attr == &sysfs_io_latency_stats_read) {
+ bch2_time_stats_to_text(&out, &ca->io_latency[READ]);
+ return out.pos - buf;
+ }
+ if (attr == &sysfs_io_latency_stats_write) {
+ bch2_time_stats_to_text(&out, &ca->io_latency[WRITE]);
+ return out.pos - buf;
+ }
+
+ sysfs_printf(congested, "%u%%",
+ clamp(atomic_read(&ca->congested), 0, CONGESTED_MAX)
+ * 100 / CONGESTED_MAX);
+
+ if (attr == &sysfs_bucket_quantiles_last_read)
+ return quantiles_to_text(&out, c, ca, bucket_last_io_fn, (void *) 0) ?: out.pos - buf;
+ if (attr == &sysfs_bucket_quantiles_last_write)
+ return quantiles_to_text(&out, c, ca, bucket_last_io_fn, (void *) 1) ?: out.pos - buf;
+ if (attr == &sysfs_bucket_quantiles_fragmentation)
+ return quantiles_to_text(&out, c, ca, bucket_sectors_used_fn, NULL) ?: out.pos - buf;
+ if (attr == &sysfs_bucket_quantiles_oldest_gen)
+ return quantiles_to_text(&out, c, ca, bucket_oldest_gen_fn, NULL) ?: out.pos - buf;
+
+ if (attr == &sysfs_reserve_stats) {
+ reserve_stats_to_text(&out, ca);
+ return out.pos - buf;
+ }
+ if (attr == &sysfs_alloc_debug) {
+ dev_alloc_debug_to_text(&out, ca);
+ return out.pos - buf;
+ }