bcachefs: Improve btree_path_dowgrade tracepoint
authorKent Overstreet <kent.overstreet@linux.dev>
Mon, 13 Nov 2023 02:47:15 +0000 (21:47 -0500)
committerKent Overstreet <kent.overstreet@linux.dev>
Mon, 1 Jan 2024 16:47:37 +0000 (11:47 -0500)
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/btree_locking.c
fs/bcachefs/trace.h

index 3d48834d091fbda928e9e462b6061ca03f847bb1..6039278121dc3966ba2a2f3237c4b06042f2fefd 100644 (file)
@@ -665,7 +665,7 @@ void __bch2_btree_path_downgrade(struct btree_trans *trans,
                                 struct btree_path *path,
                                 unsigned new_locks_want)
 {
-       unsigned l;
+       unsigned l, old_locks_want = path->locks_want;
 
        if (trans->restarted)
                return;
@@ -690,7 +690,7 @@ void __bch2_btree_path_downgrade(struct btree_trans *trans,
        bch2_btree_path_verify_locks(path);
 
        path->downgrade_seq++;
-       trace_path_downgrade(trans, _RET_IP_, path);
+       trace_path_downgrade(trans, _RET_IP_, path, old_locks_want);
 }
 
 /* Btree transaction locking: */
index fd49b63562c36cc4d2bedc1884be0815160ddb90..f663f21b07f338b7c31735243648ce31647f5fd0 100644 (file)
@@ -1252,22 +1252,37 @@ TRACE_EVENT(trans_restart_key_cache_key_realloced,
 TRACE_EVENT(path_downgrade,
        TP_PROTO(struct btree_trans *trans,
                 unsigned long caller_ip,
-                struct btree_path *path),
-       TP_ARGS(trans, caller_ip, path),
+                struct btree_path *path,
+                unsigned old_locks_want),
+       TP_ARGS(trans, caller_ip, path, old_locks_want),
 
        TP_STRUCT__entry(
                __array(char,                   trans_fn, 32    )
                __field(unsigned long,          caller_ip       )
+               __field(unsigned,               old_locks_want  )
+               __field(unsigned,               new_locks_want  )
+               __field(unsigned,               btree           )
+               TRACE_BPOS_entries(pos)
        ),
 
        TP_fast_assign(
                strscpy(__entry->trans_fn, trans->fn, sizeof(__entry->trans_fn));
                __entry->caller_ip              = caller_ip;
+               __entry->old_locks_want         = old_locks_want;
+               __entry->new_locks_want         = path->locks_want;
+               __entry->btree                  = path->btree_id;
+               TRACE_BPOS_assign(pos, path->pos);
        ),
 
-       TP_printk("%s %pS",
+       TP_printk("%s %pS locks_want %u -> %u %s %llu:%llu:%u",
                  __entry->trans_fn,
-                 (void *) __entry->caller_ip)
+                 (void *) __entry->caller_ip,
+                 __entry->old_locks_want,
+                 __entry->new_locks_want,
+                 bch2_btree_id_str(__entry->btree),
+                 __entry->pos_inode,
+                 __entry->pos_offset,
+                 __entry->pos_snapshot)
 );
 
 DEFINE_EVENT(transaction_event,        trans_restart_write_buffer_flush,