]> www.infradead.org Git - users/willy/pagecache.git/commitdiff
bcachefs: trace_write_buffer_maybe_flush
authorKent Overstreet <kent.overstreet@linux.dev>
Tue, 10 Dec 2024 15:29:12 +0000 (10:29 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Sat, 21 Dec 2024 06:36:23 +0000 (01:36 -0500)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/backpointers.c
fs/bcachefs/btree_write_buffer.c
fs/bcachefs/trace.h

index 702bf62d7fa7249baf8f886f21a245d3e4142da5..0e3b7b5d626e08a48d368f4b3cfceb7c887831fb 100644 (file)
@@ -206,7 +206,7 @@ static int bch2_backpointer_del(struct btree_trans *trans, struct bpos pos)
               : bch2_btree_delete(trans, BTREE_ID_backpointers, pos, 0);
 }
 
-static int bch2_backpointers_maybe_flush(struct btree_trans *trans,
+static inline int bch2_backpointers_maybe_flush(struct btree_trans *trans,
                                         struct bkey_s_c visiting_k,
                                         struct bkey_buf *last_flushed)
 {
index 49ce2d1e5c02022239332d1c76e8cdf7bc138702..746db6d5a0fbae3c93974b96572a38c65cac80a0 100644 (file)
@@ -632,6 +632,14 @@ int bch2_btree_write_buffer_maybe_flush(struct btree_trans *trans,
        bch2_bkey_buf_init(&tmp);
 
        if (!bkey_and_val_eq(referring_k, bkey_i_to_s_c(last_flushed->k))) {
+               if (trace_write_buffer_maybe_flush_enabled()) {
+                       struct printbuf buf = PRINTBUF;
+
+                       bch2_bkey_val_to_text(&buf, c, referring_k);
+                       trace_write_buffer_maybe_flush(trans, _RET_IP_, buf.buf);
+                       printbuf_exit(&buf);
+               }
+
                bch2_bkey_buf_reassemble(&tmp, c, referring_k);
 
                if (bkey_is_btree_ptr(referring_k.k)) {
index 7baf66beee22113df6aa81a238ef48e305b952a2..11e6547f91d6ab3812f7be4b001a69e7c6fa8a35 100644 (file)
@@ -1436,6 +1436,24 @@ TRACE_EVENT(write_buffer_flush_slowpath,
        TP_printk("%zu/%zu", __entry->slowpath, __entry->total)
 );
 
+TRACE_EVENT(write_buffer_maybe_flush,
+       TP_PROTO(struct btree_trans *trans, unsigned long caller_ip, const char *key),
+       TP_ARGS(trans, caller_ip, key),
+
+       TP_STRUCT__entry(
+               __array(char,                   trans_fn, 32    )
+               __field(unsigned long,          caller_ip       )
+               __string(key,           key                     )
+       ),
+
+       TP_fast_assign(
+               strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
+               __assign_str(key);
+       ),
+
+       TP_printk("%s %pS %s", __entry->trans_fn, (void *) __entry->caller_ip, __get_str(key))
+);
+
 DEFINE_EVENT(fs_str, rebalance_extent,
        TP_PROTO(struct bch_fs *c, const char *str),
        TP_ARGS(c, str)