cmd_fs_usage: Improve device summary

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
Kent Overstreet 2025-08-18 11:19:30 -04:00
parent 3b61ec3dba
commit 8c009da94e

View File

@ -56,14 +56,12 @@ static void dev_usage_to_text(struct printbuf *out,
if (type != BCH_DATA_unstriped)
used += u->d[type].sectors;
/* Include sizes in short summary */
prt_printf(out, "%s (device %u):\t%s\r%s\r %02u%%\n",
d->label ?: "(no label)", d->idx,
d->dev ?: "(device not found)",
bch2_member_states[u->state],
(unsigned) (used * 100 / capacity));
if (full) {
printbuf_indent_add(out, 2);
prt_printf(out, "\tdata\rbuckets\rfragmented\r\n");
@ -95,7 +93,6 @@ static void dev_usage_to_text(struct printbuf *out,
printbuf_indent_sub(out, 2);
prt_newline(out);
}
free(u);
}
@ -121,6 +118,8 @@ static void devs_usage_to_text(struct printbuf *out,
printbuf_tabstops_reset(out);
prt_newline(out);
if (full) {
printbuf_tabstop_push(out, 16);
printbuf_tabstop_push(out, 20);
printbuf_tabstop_push(out, 16);
@ -128,6 +127,36 @@ static void devs_usage_to_text(struct printbuf *out,
darray_for_each(dev_names, dev)
dev_usage_to_text(out, fs, dev, full);
} else {
printbuf_tabstop_push(out, 32);
printbuf_tabstop_push(out, 12);
printbuf_tabstop_push(out, 8);
printbuf_tabstop_push(out, 10);
printbuf_tabstop_push(out, 10);
printbuf_tabstop_push(out, 6);
prt_printf(out, "Device label\tDevice\tState\tSize\rUsed\rUse%%\r\n");
darray_for_each(dev_names, d) {
struct bch_ioctl_dev_usage_v2 *u = bchu_dev_usage(fs, d->idx);
u64 used = 0, capacity = u->nr_buckets * u->bucket_size;
for (unsigned type = 0; type < u->nr_data_types; type++)
if (type != BCH_DATA_unstriped)
used += u->d[type].sectors;
prt_printf(out, "%s (device %u):\t%s\t%s\t",
d->label ?: "(no label)", d->idx,
d->dev ?: "(device not found)",
bch2_member_states[u->state]);
prt_units_u64(out, (u->nr_buckets * u->bucket_size) << 9);
prt_tab_rjust(out);
prt_units_u64(out, used << 9);
prt_printf(out, "\r%02u%%\r\n", (unsigned) (used * 100 / capacity));
}
}
darray_for_each(dev_names, dev) {
free(dev->dev);
@ -284,6 +313,8 @@ static void replicas_summary_to_text(struct printbuf *out,
replicas_x_degraded.data[d.durability].data[degraded] += a->v.d[0];
}
prt_printf(out, "\nData by durability desired and amount degraded:\n");
unsigned max_degraded = 0;
darray_for_each(replicas_x_degraded, i)
max_degraded = max(max_degraded, i->nr);