diff --git a/cmd_fs.c b/cmd_fs.c index d6e2b223..8f45e364 100644 --- a/cmd_fs.c +++ b/cmd_fs.c @@ -9,6 +9,7 @@ #include "libbcachefs/bcachefs_ioctl.h" #include "libbcachefs/darray.h" #include "libbcachefs/opts.h" +#include "libbcachefs/super-io.h" #include "cmds.h" #include "libbcachefs.h" @@ -122,18 +123,20 @@ static void replicas_usage_to_text(struct printbuf *out, const struct bch_replicas_usage *r, dev_names *dev_names) { - unsigned i; - if (!r->sectors) return; char devs[4096], *d = devs; *d++ = '['; - for (i = 0; i < r->r.nr_devs; i++) { + unsigned durability = 0; + + for (unsigned i = 0; i < r->r.nr_devs; i++) { unsigned dev_idx = r->r.devs[i]; struct dev_name *dev = dev_idx_to_name(dev_names, dev_idx); + durability += dev->durability; + if (i) *d++ = ' '; @@ -150,6 +153,9 @@ static void replicas_usage_to_text(struct printbuf *out, prt_printf(out, "%u/%u ", r->r.nr_required, r->r.nr_devs); prt_tab(out); + prt_printf(out, "%u ", durability); + prt_tab(out); + prt_printf(out, "%s ", devs); prt_tab(out); @@ -204,20 +210,25 @@ static void fs_usage_to_text(struct printbuf *out, const char *path) prt_newline(out); printbuf_tabstops_reset(out); - printbuf_tabstop_push(out, 16); - printbuf_tabstop_push(out, 16); - printbuf_tabstop_push(out, 18); - printbuf_tabstop_push(out, 18); + printbuf_tabstop_push(out, 16); prt_str(out, "Data type"); prt_tab(out); + printbuf_tabstop_push(out, 16); prt_str(out, "Required/total"); prt_tab(out); + printbuf_tabstop_push(out, 14); + prt_str(out, "Durability"); + prt_tab(out); + + printbuf_tabstop_push(out, 14); prt_str(out, "Devices"); prt_newline(out); + printbuf_tabstop_push(out, 14); + for (i = 0; i < BCH_REPLICAS_MAX; i++) { if (!u->persistent_reserved[i]) continue; diff --git a/libbcachefs.c b/libbcachefs.c index 123109f8..82f131cf 100644 --- a/libbcachefs.c +++ b/libbcachefs.c @@ -728,6 +728,10 @@ dev_names bchu_fs_get_devices(struct bchfs_handle fs) n.label = read_file_str(fs.sysfs_fd, label_attr); free(label_attr); + char *durability_attr = mprintf("dev-%u/durability", n.idx); + n.durability = read_file_u64(fs.sysfs_fd, durability_attr); + free(durability_attr); + darray_push(&devs, n); } diff --git a/libbcachefs.h b/libbcachefs.h index a16ae866..c6ff4bbd 100644 --- a/libbcachefs.h +++ b/libbcachefs.h @@ -242,6 +242,7 @@ struct dev_name { char *dev; char *label; uuid_t uuid; + unsigned durability; }; typedef DARRAY(struct dev_name) dev_names;