aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-11-24 20:50:49 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2023-11-25 00:06:32 -0500
commit138397d89212cd0b5abdbfdd644dc7702ea00f4a (patch)
tree65600a0bee86e0b66c96d0b94530f0c6784f1e79
parent446ec6b092ccff0f95b617c307603d1025345bbc (diff)
downloadbcachefs-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.c25
-rw-r--r--libbcachefs.c4
-rw-r--r--libbcachefs.h1
3 files changed, 23 insertions, 7 deletions
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;