diff options
author | Kent Overstreet <kent.overstreet@gmail.com> | 2022-07-06 00:27:44 +0300 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-10-23 00:09:36 +0300 |
commit | 0990efaeeab14de1e3e3bf2791808afebadd1cc4 (patch) | |
tree | e00b17389b2d18dbf21cee04a4870df9a7d1c551 | |
parent | 90cecb921cfe95858a32995019f11c20b6339607 (diff) | |
download | linux-0990efaeeab14de1e3e3bf2791808afebadd1cc4.tar.xz |
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 <kent.overstreet@linux.dev>
-rw-r--r-- | fs/bcachefs/btree_iter.h | 9 | ||||
-rw-r--r-- | 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 c2f5afc9eeb9..1952a7683610 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 65c38aa38359..a52da91f279e 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, |