diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-11-24 20:50:49 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-11-25 00:06:32 -0500 |
commit | 138397d89212cd0b5abdbfdd644dc7702ea00f4a (patch) | |
tree | 65600a0bee86e0b66c96d0b94530f0c6784f1e79 | |
parent | 446ec6b092ccff0f95b617c307603d1025345bbc (diff) | |
download | bcachefs-tools-138397d89212cd0b5abdbfdd644dc7702ea00f4a.tar.gz |
cmd_fs_usage: Print out replica set durability
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
-rw-r--r-- | cmd_fs.c | 25 | ||||
-rw-r--r-- | libbcachefs.c | 4 | ||||
-rw-r--r-- | libbcachefs.h | 1 |
3 files changed, 23 insertions, 7 deletions
@@ -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; |