]> git.sesse.net Git - bcachefs-tools-debian/commitdiff
cmd_fs_usage: Print out replica set durability
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 25 Nov 2023 01:50:49 +0000 (20:50 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 25 Nov 2023 05:06:32 +0000 (00:06 -0500)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
cmd_fs.c
libbcachefs.c
libbcachefs.h

index d6e2b223630a41a2c22afb2d98fee91b2a4d60db..8f45e3641e7d0cdb72c88b435076e75094f16c60 100644 (file)
--- 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;
index 123109f8dcbefaa695b560638d065c1f1c4c7ad5..82f131cf483b99b14129b951a99d2b78cda18299 100644 (file)
@@ -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);
        }
 
index a16ae8669bdf331d697f31ec6c05a1a6670dccc2..c6ff4bbd86ae3743a45d93ec2b3942cbd38e05eb 100644 (file)
@@ -242,6 +242,7 @@ struct dev_name {
        char            *dev;
        char            *label;
        uuid_t          uuid;
+       unsigned        durability;
 };
 typedef DARRAY(struct dev_name) dev_names;