]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bcachefs: bch2_fs_accounting_to_text()
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 25 Feb 2024 00:58:07 +0000 (19:58 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 14 Jul 2024 23:00:13 +0000 (19:00 -0400)
Helper to show raw accounting in sysfs, mainly for debugging.

Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/disk_accounting.c
fs/bcachefs/disk_accounting.h
fs/bcachefs/sysfs.c

index 3b76b25b5ca2097d84d17b48f1a9457724324575..8c6e76e50a9b0c58c2e0be5fd03bb0c7bce52df4 100644 (file)
@@ -308,6 +308,32 @@ int bch2_fs_replicas_usage_read(struct bch_fs *c, darray_char *usage)
        return ret;
 }
 
+void bch2_fs_accounting_to_text(struct printbuf *out, struct bch_fs *c)
+{
+       struct bch_accounting_mem *acc = &c->accounting[0];
+
+       percpu_down_read(&c->mark_lock);
+       out->atomic++;
+
+       eytzinger0_for_each(i, acc->k.nr) {
+               struct disk_accounting_pos acc_k;
+               bpos_to_disk_accounting_pos(&acc_k, acc->k.data[i].pos);
+
+               bch2_accounting_key_to_text(out, &acc_k);
+
+               u64 v[BCH_ACCOUNTING_MAX_COUNTERS];
+               bch2_accounting_mem_read_counters(c, i, v, ARRAY_SIZE(v), false);
+
+               prt_str(out, ":");
+               for (unsigned j = 0; j < acc->k.data[i].nr_counters; j++)
+                       prt_printf(out, " %llu", v[j]);
+               prt_newline(out);
+       }
+
+       --out->atomic;
+       percpu_up_read(&c->mark_lock);
+}
+
 /* Ensures all counters in @src exist in @dst: */
 static int copy_counters(struct bch_accounting_mem *dst,
                         struct bch_accounting_mem *src)
index 5132b3dd17456ec0e6163b307fa5c704bb8dd70c..5164995f3139b97ce4de2843cfd3461f85f05cce 100644 (file)
@@ -193,6 +193,7 @@ static inline void bch2_accounting_mem_read(struct bch_fs *c, struct bpos p,
 }
 
 int bch2_fs_replicas_usage_read(struct bch_fs *, darray_char *);
+void bch2_fs_accounting_to_text(struct printbuf *, struct bch_fs *);
 
 int bch2_accounting_gc_done(struct bch_fs *);
 
index f363863337ad7213af5e13555ffe0f76eed0b82d..88800f111d9eaab63bd1ab2dada9be51282489a1 100644 (file)
@@ -203,6 +203,7 @@ read_attribute(disk_groups);
 
 read_attribute(has_data);
 read_attribute(alloc_debug);
+read_attribute(accounting);
 
 #define x(t, n, ...) read_attribute(t);
 BCH_PERSISTENT_COUNTERS()
@@ -388,6 +389,9 @@ SHOW(bch2_fs)
        if (attr == &sysfs_alloc_debug)
                bch2_fs_alloc_debug_to_text(out, c);
 
+       if (attr == &sysfs_accounting)
+               bch2_fs_accounting_to_text(out, c);
+
        return 0;
 }
 
@@ -601,6 +605,7 @@ struct attribute *bch2_fs_internal_files[] = {
 
        &sysfs_disk_groups,
        &sysfs_alloc_debug,
+       &sysfs_accounting,
        NULL
 };