]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Improve bch2_bkey_ptrs_to_text()
authorKent Overstreet <kent.overstreet@gmail.com>
Thu, 31 Mar 2022 03:40:19 +0000 (23:40 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:09:28 +0000 (17:09 -0400)
Print bucket:offset when the filesystem is online; this makes debugging
easier when correlating with alloc updates.

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
fs/bcachefs/extents.c
fs/bcachefs/super.h

index c78e10e8ec2c6c8e3488b6de25a8870d010b25f8..01d14645579b98011ab898f165006a9cae813a68 100644 (file)
@@ -953,15 +953,21 @@ void bch2_bkey_ptrs_to_text(struct printbuf *out, struct bch_fs *c,
                switch (__extent_entry_type(entry)) {
                case BCH_EXTENT_ENTRY_ptr:
                        ptr = entry_to_ptr(entry);
+                       ca = c && ptr->dev < c->sb.nr_devices && c->devs[ptr->dev]
+                               ? bch_dev_bkey_exists(c, ptr->dev)
+                               : NULL;
+
+                       if (!ca) {
+                               pr_buf(out, "ptr: %u:%llu gen %u%s", ptr->dev,
+                                      (u64) ptr->offset, ptr->gen,
+                                      ptr->cached ? " cached" : "");
+                       } else {
+                               u32 offset;
+                               u64 b = sector_to_bucket_and_offset(ca, ptr->offset, &offset);
 
-                       pr_buf(out, "ptr: %u:%llu gen %u%s", ptr->dev,
-                              (u64) ptr->offset, ptr->gen,
-                              ptr->cached ? " cached" : "");
-
-                       if (c) {
-                               ca = ptr->dev < c->sb.nr_devices && c->devs[ptr->dev]
-                                       ? bch_dev_bkey_exists(c, ptr->dev)
-                                       : NULL;
+                               pr_buf(out, "ptr: %u:%llu:%u gen %u%s", ptr->dev,
+                                      b, offset, ptr->gen,
+                                      ptr->cached ? " cached" : "");
 
                                if (ca && ptr_stale(ca, ptr))
                                        pr_buf(out, " stale");
index 6414f6a6bb910777feee56908b7239e9689cbcb5..359fa1e7fc1863dab833dd1080ec58cb913ece5b 100644 (file)
@@ -26,6 +26,12 @@ static inline sector_t bucket_remainder(const struct bch_dev *ca, sector_t s)
        return remainder;
 }
 
+static inline size_t sector_to_bucket_and_offset(const struct bch_dev *ca, sector_t s,
+                                                u32 *offset)
+{
+       return div_u64_rem(s, ca->mi.bucket_size, offset);
+}
+
 static inline bool bch2_dev_is_online(struct bch_dev *ca)
 {
        return !percpu_ref_is_zero(&ca->io_ref);