]> www.infradead.org Git - users/hch/misc.git/commitdiff
bcachefs: BCH_JSET_ENTRY_log_bkey
authorKent Overstreet <kent.overstreet@linux.dev>
Sun, 30 Mar 2025 20:50:59 +0000 (16:50 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 30 Mar 2025 22:25:12 +0000 (18:25 -0400)
Add a journal entry type for logging - but logging a bkey, not a string;
to be used for data move path debugging.

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

index e96d877670204896c33875ab915dabe7788c99c1..a3db328dee31f5e1c7920ca76abd66679431a9d0 100644 (file)
@@ -1143,7 +1143,8 @@ static inline __u64 __bset_magic(struct bch_sb *sb)
        x(log,                  9)              \
        x(overwrite,            10)             \
        x(write_buffer_keys,    11)             \
-       x(datetime,             12)
+       x(datetime,             12)             \
+       x(log_bkey,             13)
 
 enum bch_jset_entry_type {
 #define x(f, nr)       BCH_JSET_ENTRY_##f      = nr,
index bd2eb42edb2418c21df1b85f93bd32151a71294c..c05394f56424071c6dd5b293b945bd58ff0761c1 100644 (file)
@@ -846,6 +846,19 @@ int bch2_trans_log_msg(struct btree_trans *trans, struct printbuf *buf)
        return 0;
 }
 
+int bch2_trans_log_bkey(struct btree_trans *trans, enum btree_id btree,
+                       unsigned level, struct bkey_i *k)
+{
+       struct jset_entry *e = bch2_trans_jset_entry_alloc(trans, jset_u64s(k->k.u64s));
+       int ret = PTR_ERR_OR_ZERO(e);
+       if (ret)
+               return ret;
+
+       journal_entry_init(e, BCH_JSET_ENTRY_log_bkey, btree, level, k->k.u64s);
+       bkey_copy(e->start, k);
+       return 0;
+}
+
 __printf(3, 0)
 static int
 __bch2_fs_log_msg(struct bch_fs *c, unsigned commit_flags, const char *fmt,
index d2e1c04353f6bedf12bbc1c6d1a963d962d0b5ea..568e56c911907c027f9732b684839539724b2bf6 100644 (file)
@@ -170,6 +170,8 @@ void bch2_trans_commit_hook(struct btree_trans *,
 int __bch2_trans_commit(struct btree_trans *, unsigned);
 
 int bch2_trans_log_msg(struct btree_trans *, struct printbuf *);
+int bch2_trans_log_bkey(struct btree_trans *, enum btree_id, unsigned, struct bkey_i *);
+
 __printf(2, 3) int bch2_fs_log_msg(struct bch_fs *, const char *, ...);
 __printf(2, 3) int bch2_journal_log_msg(struct bch_fs *, const char *, ...);
 
index 228e531921b7b14057f6f3c41e80e71f2bde92e8..2debc213e47c7107d4ea30a7332bd83e9aa92a0d 100644 (file)
@@ -764,6 +764,23 @@ static void journal_entry_overwrite_to_text(struct printbuf *out, struct bch_fs
        journal_entry_btree_keys_to_text(out, c, entry);
 }
 
+static int journal_entry_log_bkey_validate(struct bch_fs *c,
+                               struct jset *jset,
+                               struct jset_entry *entry,
+                               unsigned version, int big_endian,
+                               struct bkey_validate_context from)
+{
+       from.flags = 0;
+       return journal_entry_btree_keys_validate(c, jset, entry,
+                               version, big_endian, from);
+}
+
+static void journal_entry_log_bkey_to_text(struct printbuf *out, struct bch_fs *c,
+                                          struct jset_entry *entry)
+{
+       journal_entry_btree_keys_to_text(out, c, entry);
+}
+
 static int journal_entry_write_buffer_keys_validate(struct bch_fs *c,
                                struct jset *jset,
                                struct jset_entry *entry,