diff options
-rw-r--r-- | fs/bcachefs/btree_update_interior.c | 6 | ||||
-rw-r--r-- | fs/bcachefs/trace.h | 17 |
2 files changed, 22 insertions, 1 deletions
diff --git a/fs/bcachefs/btree_update_interior.c b/fs/bcachefs/btree_update_interior.c index 772595b3da9f..153d13b9c96e 100644 --- a/fs/bcachefs/btree_update_interior.c +++ b/fs/bcachefs/btree_update_interior.c @@ -1555,8 +1555,10 @@ int bch2_btree_split_leaf(struct bch_fs *c, struct btree_iter *iter, /* Hack, because gc and splitting nodes doesn't mix yet: */ if (!(flags & BTREE_INSERT_GC_LOCK_HELD) && !down_read_trylock(&c->gc_lock)) { - if (flags & BTREE_INSERT_NOUNLOCK) + if (flags & BTREE_INSERT_NOUNLOCK) { + trace_transaction_restart_ip(trans->ip, _THIS_IP_); return -EINTR; + } bch2_trans_unlock(trans); down_read(&c->gc_lock); @@ -1584,6 +1586,8 @@ int bch2_btree_split_leaf(struct bch_fs *c, struct btree_iter *iter, BUG_ON(flags & BTREE_INSERT_NOUNLOCK); bch2_trans_unlock(trans); ret = -EINTR; + + trace_transaction_restart_ip(trans->ip, _THIS_IP_); } goto out; } diff --git a/fs/bcachefs/trace.h b/fs/bcachefs/trace.h index a9fcb5442186..d109ef174fd0 100644 --- a/fs/bcachefs/trace.h +++ b/fs/bcachefs/trace.h @@ -499,6 +499,23 @@ TRACE_EVENT(copygc, __entry->buckets_moved, __entry->buckets_not_moved) ); +TRACE_EVENT(transaction_restart_ip, + TP_PROTO(unsigned long caller, unsigned long ip), + TP_ARGS(caller, ip), + + TP_STRUCT__entry( + __field(unsigned long, caller ) + __field(unsigned long, ip ) + ), + + TP_fast_assign( + __entry->caller = caller; + __entry->ip = ip; + ), + + TP_printk("%pF %pF", (void *) __entry->caller, (void *) __entry->ip) +); + DECLARE_EVENT_CLASS(transaction_restart, TP_PROTO(unsigned long ip), TP_ARGS(ip), |