Add a tracepoint for when we insert only part of an extent, due to too
many overwrites.

Signed-off-by: Kent Overstreet <kent.overstr...@linux.dev>
---
 fs/bcachefs/extent_update.c | 13 ++++++++++++-
 fs/bcachefs/trace.h         |  5 +++++
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/fs/bcachefs/extent_update.c b/fs/bcachefs/extent_update.c
index b899ee75f5b9..e76e58a568bf 100644
--- a/fs/bcachefs/extent_update.c
+++ b/fs/bcachefs/extent_update.c
@@ -139,6 +139,17 @@ int bch2_extent_trim_atomic(struct btree_trans *trans,
        if (ret)
                return ret;
 
-       bch2_cut_back(end, k);
+       /* tracepoint */
+
+       if (bpos_lt(end, k->k.p)) {
+               if (trace_extent_trim_atomic_enabled()) {
+                       CLASS(printbuf, buf)();
+                       bch2_bpos_to_text(&buf, end);
+                       prt_newline(&buf);
+                       bch2_bkey_val_to_text(&buf, trans->c, bkey_i_to_s_c(k));
+                       trace_extent_trim_atomic(trans->c, buf.buf);
+               }
+               bch2_cut_back(end, k);
+       }
        return 0;
 }
diff --git a/fs/bcachefs/trace.h b/fs/bcachefs/trace.h
index dc09532796af..41efebdd06ef 100644
--- a/fs/bcachefs/trace.h
+++ b/fs/bcachefs/trace.h
@@ -1490,6 +1490,11 @@ DEFINE_EVENT(fs_str, io_move_evacuate_bucket,
        TP_ARGS(c, str)
 );
 
+DEFINE_EVENT(fs_str, extent_trim_atomic,
+       TP_PROTO(struct bch_fs *c, const char *str),
+       TP_ARGS(c, str)
+);
+
 #ifdef CONFIG_BCACHEFS_PATH_TRACEPOINTS
 
 TRACE_EVENT(update_by_path,
-- 
2.50.0


Reply via email to