From 0990efaeeab14de1e3e3bf2791808afebadd1cc4 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Tue, 5 Jul 2022 17:27:44 -0400 Subject: [PATCH] bcachefs: btree_trans_too_many_iters() is now a transaction restart All transaction restarts need a tracepoint - this is essential for debugging Signed-off-by: Kent Overstreet --- fs/bcachefs/btree_iter.h | 9 +++++++-- fs/bcachefs/trace.h | 6 ++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/fs/bcachefs/btree_iter.h b/fs/bcachefs/btree_iter.h index c2f5afc9eeb97..1952a76836102 100644 --- a/fs/bcachefs/btree_iter.h +++ b/fs/bcachefs/btree_iter.h @@ -4,6 +4,7 @@ #include "bset.h" #include "btree_types.h" +#include "trace.h" static inline void __btree_path_get(struct btree_path *path, bool intent) { @@ -384,8 +385,12 @@ static inline struct bkey_s_c bch2_btree_iter_peek_upto_type(struct btree_iter * static inline int btree_trans_too_many_iters(struct btree_trans *trans) { - return hweight64(trans->paths_allocated) > BTREE_ITER_MAX / 2 - ? -EINTR : 0; + if (hweight64(trans->paths_allocated) > BTREE_ITER_MAX / 2) { + trace_trans_restart_too_many_iters(trans->fn, _THIS_IP_); + return btree_trans_restart(trans); + } + + return 0; } static inline struct bkey_s_c diff --git a/fs/bcachefs/trace.h b/fs/bcachefs/trace.h index 65c38aa383595..a52da91f279e6 100644 --- a/fs/bcachefs/trace.h +++ b/fs/bcachefs/trace.h @@ -755,6 +755,12 @@ DEFINE_EVENT(transaction_event, trans_restart_key_cache_raced, TP_ARGS(trans_fn, caller_ip) ); +DEFINE_EVENT(transaction_event, trans_restart_too_many_iters, + TP_PROTO(const char *trans_fn, + unsigned long caller_ip), + TP_ARGS(trans_fn, caller_ip) +); + DECLARE_EVENT_CLASS(transaction_restart_iter, TP_PROTO(const char *trans_fn, unsigned long caller_ip, -- 2.39.5